问题描述:
Mysql主键自增,加入当前主键是20,删掉该记录之后,在插入一条,主键是20还是21?
不同的引擎对于自增值得保存策略不同。
1、MySAM 引擎的自增主键保存在数据文件中
2、InnoDB 引擎的自增值,其实就是保存在了内存里,并且到了Mysql8.0版本后,才有了“自增持久化”的能力,也就是说“如果发生重启,MySQL自增主键可以恢复为Mysql重启前的值”,具体情况如下:
1、在MySQL5.7及之前的版本,自增值保存在内存里面,并没有持久化。每次重启后,第一次打开表的时候,都会去找自增值得最大值max(id),然后将max(id) + 1,作为这个表的当前自增值。
举例来说,如果一个表当前最大的Id是20,AUTO_INCREMENT=21,这时候我们删除id = 20的行,AUTO_INCREMENT还是21,如果我现在马上重启实例,重启后这个表的AUTO_INCREMENT就会变成20,也就就是说MySQL重启可能会修改一个表的AUTO_INCREMENT 。
2、在MySQL8.0版本,将自增值得变更记录在redo log 中,重启的时候依靠redo log恢复重启之前的值。