写点什么

Mysql 重启后 innodb 和 myisam 插入的主键 id 变化总结

作者:知识浅谈
  • 2022 年 8 月 03 日
  • 本文字数:507 字

    阅读完需:约 2 分钟

Mysql重启后innodb和myisam插入的主键id变化总结

以下分析使用案例

案例 1:已有 id 1,2,3,4,5,6,7 删除 5,6

案例 2:已有 id 1,2,3,4,5,6,7 删除 6,7

Mysql8.0 以前

innodb:

结果:会取出记录中最大 id 值,作为起始点加 1,进行递增。

案例 1: 

因为删除 5,6 剩下的 7 最大,所以再新增数据的时候是从 8 开始。

案例 2: 

因为删除 6,7 剩下的 5 最大,所以再新增数据的时候是从 6 开始。

myisam:

结果:myisam 自增的时候会把自增的最大值存到文件中,重启后会从文件中去除之前插入的时候最大 id 值加 1,作为起始点,进行递增。

案例 1: 

删除 5,6,但是之前记录的最大为 7,所以再新增数据的时候是从 8 开始。

案例 2: 

删除 6,7,但是之前记录的最大为 7,所以再新增数据的时候是从 8 开始。


Mysql8.0 以后

innodb 做了改进,就是在更新自增 id 值之后,会把这个 id 的最大值记录到 redolog 中的计数器和系统文件中的计数器,重启之后取值的时候是主要从这两个进行分析的。

正常关闭重启

正常关闭后,重新启动会直接去系统文件中取出计数器的值,以计数器的值加 1 进行之后插入数据的自增 id 计算。

异常宕机重启

异常关闭重启后,会从系统文件中取出计数器中的值,并且会从 redolog 中取出计数器的值,把这两个值进行比较找出最大的值,并把最大的值加 1 进行之后的插入数据的自增 id 运算。

发布于: 刚刚阅读数: 2
用户头像

知识浅谈

关注

公众号:知识浅谈 2022.06.22 加入

🍁 作者:知识浅谈,CSDN签约讲师,后端领域优质创作者,阿里云社区技术博主,热爱分享创作 💒 公众号:知识浅谈 📌 擅长领域:全栈工程师、爬虫、ACM算法 🔥 联系方式vx:zsqtcc

评论

发布
暂无评论
Mysql重启后innodb和myisam插入的主键id变化总结_8月月更_知识浅谈_InfoQ写作社区