在定義唯一約束后,寫入相同的記錄,系統(tǒng)會(huì)提示錯(cuò)誤,繼續(xù)寫入其他記錄,查看記錄時(shí),發(fā)現(xiàn)id的自動(dòng)編號(hào)會(huì)出現(xiàn)不連續(xù)的情況,這是為什么呢?

lailai賴皮
2014-10-14
2 回答
舉報(bào)
0/150
提交
取消
2014-12-06
>show create table 表名;
--------------------------------------------------------------------------------------------------------------
| people | CREATE TABLE `people` (
? `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
? `name` varchar(20) NOT NULL,
? `city_id` smallint(5) unsigned DEFAULT NULL,
? PRIMARY KEY (`id`),
? KEY `city_id` (`city_id`),
? CONSTRAINT `people_ibfk_1` FOREIGN KEY (`city_id`) REFERENCES `city` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8
----------------------------------------------------------------------------------------------------------------------
可以看到最后一排有個(gè)AUTO_INCREMENT=13,這里就自動(dòng)記錄了當(dāng)前最大的Id號(hào),你上面出現(xiàn)1,3,4,斷號(hào)的情況是因?yàn)槟阍贗nsert into 第2條記錄的時(shí)候應(yīng)該出現(xiàn)了syntax錯(cuò)誤吧,所以這里的AUTO_INCREMENT就自動(dòng)增加到了2(雖然數(shù)據(jù)沒有插入成功,但它還是自動(dòng)加了一次),當(dāng)你再插入記錄的時(shí)候,自然而然ID是從2開始累加,因此是3.
應(yīng)為該表采用的是InnoDB的存儲(chǔ)引擎,而InnoDB則是把最大的ID值記錄到了內(nèi)存中,所以重啟mysql或者對(duì)表進(jìn)行了OPTIMIZE操作后,最大ID值將會(huì)丟失(這條是在網(wǎng)上看到的,我是重啟了電腦再登錄mysql,用“show create table 表名;”再次查看驗(yàn)證的)
ps:上面一條評(píng)論我回答的不詳細(xì)了,今天知道了更正確的答案。
2014-12-05
因?yàn)閍uto_increment會(huì)查找當(dāng)前記錄的最大Id號(hào),進(jìn)行累加