有时候会碰到一种奇怪的问题,就是自增长的字段,删除之后,新添加的记录有时连续,有时不连续的情况。
MySQL 的auto_increment 的值是被存放在内存中的计数器累加出来的,当我们重启服务器,或者MySQL服务的时候,计数器都会丢失。这时,当我们执行insert操作的时候,MySQL会默认获取到自增长的最大值,类似于使用
SELECT MAX(sid) FROM student FOR UPDATE; 然后再+1
有一个如下表

选区_018.png

初始表
如果我们执行删除
sid=5的操作

delete sid=5
然后执行插入

insert操作
我们发现sid的值是6而不是5,这是因为自加并非是按照字段的最大值来加的,而是根据内存中的计数器算出来的。
现在,让我们删除
sid=6的记录

delete sid=6
然后重启服务器,
service mysql restart再次执行插入操作

insert操作
自增长又是连续的了,这是因为,我们重启mysql服务之后,计数器丢失,当我们执行
insert操作的时候,MySQL又为我们重新创建了一个计数器,获取自增长最大值的方式,或许就是SELECT MAX(sid) FROM student FOR UPDATE;