auto_increment 值的问题

有时候会碰到一种奇怪的问题,就是自增长的字段,删除之后,新添加的记录有时连续,有时不连续的情况。

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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容