mysql数据库AUTO_INCREMENT 引起的id异常

mysql设置id为自增属性,由于这个属性导致的一个bug。详细场景不描述了。

问题解决:

后来在MySQL官方找到对应的答案,原因是那天开新服时程序重启了数据库而暴露出这个BUG:

If you specify an AUTO_INCREMENT column for an InnoDBtable, the table handle in the InnoDB data dictionarycontains a special counter called the auto-increment counter that is used inassigning new values for the column. This counter is stored only in mainmemory, not on disk.

From:http://dev.mysql.com/doc/refma ... .html

简单来说,在InnoDB的表制定一个递增初始值时,innodb会为其维护一个auto-incrememt的计数器;但是这个计数器只保存在内存中,而不是在disk上。

而重启之后获得索引通过下面这种语法:

SELECTMAX(ai_col) FROM t FOR UPDATE;

获取到递增列的最大的值来开始递增,如果该表为空的话,那么就会从1开始递增。

【解决方案】

在创表时插入一个以1000开始的无效数据,确保重启mysql后新的递增初始值正常。同时查看其他表是否有类似问题,在后面涉及新建表时回归此类情况。

0 个评论

要回复文章请先登录注册