[英]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.