我在MySQL中有一个包含997653行的表,但是在我删除了几行后,它现在是994332行。但是,ID列的最后一个数字仍然是997653.如何重置它以重新计算列?
我已经尝试了ALTER TABLE foo AUTO_INCREMENT=1;
但是没有用。
答案 0 :(得分:1)
这是重播的正确语法,但您绝不应该重新设置docker container exec -it your_container_name bash
列值。是的,一旦删除行,auto_increment
值将继续用于下一个值,但这不会对您的表或对该表进行的查询产生任何影响。
如果有问题,您甚至可以考虑执行软删除,而不是执行硬删除发布auto_increment
语句
答案 1 :(得分:1)
如果表引擎是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
。