mysql聯合主鍵的自增問題

http://hi.baidu.com/kinghmx/item/0633c1ec6cda06235b2d6418


mysql聯合主鍵的自增問題

網上查看資料的時候,偶然看到一篇文章談到mysql聯合主鍵自增長的問題,該文章提到:

 

當多列被設爲聯合主鍵時,auto_increment屬性得列並不是自顧自得一味的增長。
而是配合其他主鍵的列。
例如:id和vid爲聯合主鍵,vid爲auto auto_increment,
當id爲1時,vid自動增長;
當id改變爲2時,vid重新歸1,從1開始增長。

 

     但是我按照該方法測試的時候,卻無法設置聯合主鍵vid自增長?

執行命令:ALTER TABLE `test_table` CHANGE `vid` `vid` int(11) not null auto_increment;
提示錯誤:ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key。

     當時百思不得其解,開始以爲是數據庫有數據的原因,後來才發現是因爲我用的存儲引擎是InnoDB的原因。對於AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯合索引。

     然後我又建立2張表test1table,test2table用來測試,2張表的結構都是如下三個字段:id,vid,name。id,vid爲聯合主鍵,存儲引擎都是MyISAM。不同的是:test1table表是id自增長;test2table是vid自增長。
插入一些數據後發現:
test1table表id只會自增,不會根據vid的值恢復到1;
而test2table表vid則會根據id的值的變化,而恢復到1。
即如果是聯合主鍵第一列(id)自增時,則只會自己自增,不會根據第二列(vid)的值恢復到1。
只有在聯合主鍵第二列(vid),纔會出現我們預期的效果,根據第一列的值的變化會將只恢復到1。結論:
1、要使用mysql聯合主鍵自增,需使用MyISAM作爲存儲引擎。
2、使用聯合主鍵自增的時候,自增鍵不能是主鍵最左的鍵。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章