2020-12-02:mysql中,一张表里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql

福大大架构师每日一题 2020-12-02 07:11:03
2020-12-02:mysql中,一张表里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 15 ?#福大大架构师每日一题#
...全文
3330 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiangqing 2020-12-03
  • 打赏
  • 举报
回复
这个还是18
神话jsh 2020-12-03
  • 打赏
  • 举报
回复
必须是18啊 我对天发誓
  • 打赏
  • 举报
回复
这个情况比较复杂的,首先维护自增主键id的值AUTO_INCREMENT是放在内存里的,这是一个大前提。所以,你采用删除表数据是没用的,AUTO_INCREMENT值没改变。但是如果你重启数据库AUTO_INCREMENT的值就会改变了,相当于重启后获得表最大的AUTO_INCREMENT(select max(id) maxId from table,之后AUTO_INCREMENT+1。(引擎是InnoDB) 当然也有例外,如果你的mysql低于8.0版本,数据库引擎是MyISAM,那无论你删除或者重启,AUTO_INCREMENT都不会改变,这应该算是个bug,8.0版本就放弃使用MyISAM引擎了。
jvliao 2020-12-02
  • 打赏
  • 举报
回复
使用MylSAM引擎,则记录是18
KeepSayingNo 2020-12-02
  • 打赏
  • 举报
回复
是18啊,这是增长ID的作用啊,不管你删不删
tianfang 2020-12-02
  • 打赏
  • 举报
回复
老版本是18 , 除非使用sql修改,新版本情况不清楚
剑来灬 2020-12-02
  • 打赏
  • 举报
回复
15 凑个字数
亦夜 2020-12-02
  • 打赏
  • 举报
回复
如果使用的是InnoDB引擎,且在8版本以前则记录的ID是15,因为InnoDB会把最大ID写入到内存中,如果是8.0及以后的版本则是将其写入到日志中的,所以记录是18。 如果使用的是MylSAM引擎,则记录是18,因为MylSAM会将最大ID记录到数据文件中。
源者鬼道 2020-12-02
  • 打赏
  • 举报
回复
ID 自增主键,18
一头小山猪 2020-12-02
  • 打赏
  • 举报
回复
18~是通过内置的序列控制的,在序列未满的情况下都是顺次往下~
关切得大神 2020-12-02
  • 打赏
  • 举报
回复
在新版Navicat里亲测,重新插入的id是18,而不是之前的15
  • 打赏
  • 举报
回复
这个还是18

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧