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


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

然后执行插入

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

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

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