繁体   English   中英

无法在MySQL中重置AUTO_INCREMENT?

[英]Unable to reset AUTO_INCREMENT in MySQL?

我在MySQL中有一个表,该表具有997653行,但是删除了几行后,现在是994332行。 但是,ID列的最后一个数字仍然是997653。如何重置它以重新计数列?

我已经尝试过ALTER TABLE foo AUTO_INCREMENT=1; 但这没有用。

这是重新播种的正确语法,但是您永远不应重新设定auto_increment列值。 是的,一旦删除行, auto_increment值将继续使用下一个值,但这不会对您的表或对该表进行的查询产生任何影响。

如果有问题,您甚至可以考虑执行软删除,而不是执行硬delete from...语句中delete from...

如果表引擎是InnoDB,那么足以重启MySQL服务(如果在您的设置中可能的话)。

InnoDB表引擎不在任何地方存储自动增量值。 服务器启动时,它将查找表中存在的最大值(这很容易, AUTO_INCREMENT列始终是表的PK ),对其进行递增,这是它在下一个INSERT上使用的新值。

文档中对此进行了解释:

如果为InnoDB表指定AUTO_INCREMENT列,则InnoDB数据字典中的表句柄将包含一个称为自动增量计数器的特殊计数器,该计数器用于为该列分配新值。 该计数器仅存储在主存储器中,而不存储在磁盘上。

要在服务器重启后初始化自动递增计数器, InnoDB在包含AUTO_INCREMENT列的表中的第一个插入处执行以下语句的等效项。

 SELECT MAX(ai_col) FROM table_name FOR UPDATE; 

InnoDB递增该语句检索的值,并将其分配给表的列和自动递增计数器。 默认情况下,该值增加1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM