INCREMENT用法实例详解(6)

当为一张InnoDB表指定自增列时,此时表在数据字典中维护着一个特殊的计数器为自增列分配值,名称为 auto_increment 计数器,这个计数器是存储中内存中,而不是在磁盘上。

当服务器重启之后后,为了初始化 auto_increment 计数器,InnoDB执行如下等效语句来确定自增列下个需要分配的值:

SELECT MAX(ai_col) FROM table_name FOR UPDATE;

默认的,自增列的下一个分配值由以上语句得出的值增加 1 ,这个增加步长由参数 auto_increment_increment 决定。如果是空表,则自增列的下一个分配值为 1 ,这个空表时默认值由参数 auto_increment_offset 决定。

当表中指定自增列,如果没有为自增列值指定值,则由计数器分配。如果为自增列指定了值,还是插入指定的值。如果指定插入值大于计数器的值,同时计数器也会跟着调整,这样容易造成间隙。

由于计数据器是运行在内存中,所以当服务器重启后,InnoDB会重新初始化计数器。

服务器重启的同时也重置了之前 CREATE TABLEALTER TABLE 为表指定的 AUTO_INCREMENT 值,可以再次通过语句进行指定。

参考

https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1d5a312e1ef4d1e075cfc5c4cbd70c15.html