auto_increment 值的问题

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

MySQL 的auto_increment 的值是被存放在内存中的计数器累加出来的,当我们重启服务器,或者MySQL服务的时候,计数器都会丢失。这时,当我们执行insert操作的时候,MySQL会默认获取到自增长的最大值,类似于使用
SELECT MAX(sid) FROM student FOR UPDATE; 然后再+1
有一个如下表

auto_increment 值的问题_第1张图片
选区_018.png

auto_increment 值的问题_第2张图片
初始表

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

delete sid=5

然后执行插入

auto_increment 值的问题_第3张图片
insert操作

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

auto_increment 值的问题_第4张图片
delete sid=6

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

auto_increment 值的问题_第5张图片
insert操作

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

你可能感兴趣的:(auto_increment 值的问题)