在定义唯一约束后,写入相同的记录,系统会提示错误,继续写入其他记录,查看记录时,发现id的自动编号会出现不连续的情况,这是为什么呢?
2 回答
>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
----------------------------------------------------------------------------------------------------------------------
可以看到最后一排有个AUTO_INCREMENT=13,这里就自动记录了当前最大的Id号,你上面出现1,3,4,断号的情况是因为你在Insert into 第2条记录的时候应该出现了syntax错误吧,所以这里的AUTO_INCREMENT就自动增加到了2(虽然数据没有插入成功,但它还是自动加了一次),当你再插入记录的时候,自然而然ID是从2开始累加,因此是3.
应为该表采用的是InnoDB的存储引擎,而InnoDB则是把最大的ID值记录到了内存中,所以重启mysql或者对表进行了OPTIMIZE操作后,最大ID值将会丢失(这条是在网上看到的,我是重启了电脑再登录mysql,用“show create table 表名;”再次查看验证的)
ps:上面一条评论我回答的不详细了,今天知道了更正确的答案。
举报