如何在 MySQL 中重置 AUTO_INCREMENT?

如何重置字段的AUTO_INCREMENT ?我希望它再次从1开始计数。

答案

您可以使用以下方法重置计数器:

ALTER TABLE tablename AUTO_INCREMENT = 1

对于 InnoDB,您不能将auto_increment值设置为auto_increment或等于当前最大索引。 (引自ViralPatel ):

请注意,您不能将计数器重置为小于或等于已使用的任何值。对于 MyISAM,如果该值小于或等于 AUTO_INCREMENT 列中当前的最大值,则该值将重置为当前的最大值加 1。对于 InnoDB,如果该值小于该列中的当前最大值,则不会发生错误,并且当前序列值不会更改。

请参见如何使用另一个表中的 MAX 值重置 MySQL 自动增量?如何动态获得可接受的值。

ALTER TABLE tablename AUTO_INCREMENT = 1
SET  @num := 0;

UPDATE your_table SET id = @num := (@num+1);

ALTER TABLE your_table AUTO_INCREMENT =1;

我认为这可以做到

就像这样:

ALTER TABLE tablename AUTO_INCREMENT = value;

参考: http : //dev.mysql.com/doc/refman/5.1/en/alter-table.html

在此处输入图片说明使用 phpmyadmin 的 “操作” 标签下有一种非常简单的方法,您可以在表选项中将自动增量设置为所需的数字。

最适合我的解决方案:

ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;

它的速度很快,可与 innoDB 一起使用,并且我不需要知道当前的最大值!这样,自动增量计数器将复位,并从存在的最大值开始自动启动。

这个问题的最高评分答案都建议 “ALTER yourtable AUTO_INCREMENT = value”。然而,当这仅适用value在 alter 比自动增量列的电流最大值。 根据 MySQL 8 文档

您不能将计数器重置为小于或等于当前使用的值。对于 InnoDB 和 MyISAM,如果该值小于或等于 AUTO_INCREMENT 列中当前的最大值,则该值将重置为当前的最大 AUTO_INCREMENT 列值加 1。

从本质上讲,您只能更改 AUTO_INCREMENT 以增加 autoincrement 列的值,而不能将其重置为 1,这是 OP 在问题的第二部分中提出的。对于实际上允许您将 AUTO_INCREMENT 从当前最大值向下设置的选项,请查看重新排序 / 重置自动递增主键

如何重置 MySQL 自动增量列中提供了不错的选择

注意, ALTER TABLE tablename AUTO_INCREMENT = value; 不适用于 InnoDB 的工作

由于功能在 MySQL 5.6 中已更改,因此添加了更新。从 MySQL 5.6 开始,您可以在 InnoDB 中使用简单的 ALTER TABLE:

ALTER TABLE tablename AUTO_INCREMENT = 1;

文档已更新以反映此情况:

http://dev.mysql.com/doc/refman/5.6/en/alter-table.html

我的测试还显示该表未复制,仅更改了值。

ALTER TABLE news_feed DROP id

ALTER TABLE news_feed ADD  id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)

我在一些脚本中使用了此功能,先删除 id 字段,然后再使用以前的设置将其添加回去,数据库表中所有现有的字段都填充有新的自动增量值,这也应与 InnoDB 一起使用。

请注意,表中的所有字段将被重新计数,并将具有其他 ID !!!。