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 运算。
版权声明: 本文为 InfoQ 作者【知识浅谈】的原创文章。
原文链接:【http://xie.infoq.cn/article/c55cfb72d4d101dd72533d189】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论