MySQL auto_increment设置异常:指定值后自增起始为该值+1
问题原因与解决办法
这是因为MySQL里AUTO_INCREMENT的实际含义是下一个将要分配的自增ID值,而非你预期的起始最小值,具体逻辑如下:
- 空表设置
AUTO_INCREMENT=100时,表内无任何数据,下一个分配的ID就是100,插入第一条数据后,AUTO_INCREMENT会自动更新为101,为下一次插入做准备。 - 后续尝试设置
AUTO_INCREMENT=200(或其他值)时,如果此时表中已存在的最大自增ID大于等于你设置的值,MySQL会自动把AUTO_INCREMENT调整为当前最大ID + 1。比如你之前已经插入过ID到200的记录,设置AUTO_INCREMENT=200就会被自动改成201,此时插入的下一条数据自然就是201。
如果要确保设置后插入的第一条数据是你指定的值,按以下步骤操作:
- 先检查表中最大自增ID:
SELECT MAX(your_auto_increment_column) FROM your_table;
- 如果最大值小于你要设置的起始值(比如要设200,最大值是199),执行:
ALTER TABLE your_table AUTO_INCREMENT = 200;
此时插入的下一条数据ID就是200。
3. 如果最大值已经大于等于你要设置的值,需要先删除大于等于该值的记录,再执行上述修改命令。
额外注意:InnoDB存储引擎下,AUTO_INCREMENT的值会持久化到磁盘,重启服务也不会重置;如果是MyISAM,重启后会重新计算最大ID+1作为AUTO_INCREMENT值。
内容的提问来源于stack exchange,提问作者Mihee Kim
相关产品推荐
相关产品推荐

