以下分析使用案例
案例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运算。