为了账号安全,请及时绑定邮箱和手机立即绑定

在定义唯一约束后,写入相同的记录,系统会提示错误,继续写入其他记录,查看记录时,发现id的自动编号会出现不连续的情况,这是为什么呢?543cbf0100018f4f02450171.jpg

正在回答

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:上面一条评论我回答的不详细了,今天知道了更正确的答案。

3 回复 有任何疑惑可以回复我~

因为auto_increment会查找当前记录的最大Id号,进行累加

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       396886    人
  • 解答问题       3353    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程
意见反馈 帮助中心 APP下载
官方微信