如何重置字段的AUTO_INCREMENT?

我希望它再次从1开始计数。


当前回答

如果您使用PHPStorm的数据库工具,则必须在数据库控制台中输入:

ALTER TABLE <table_name> AUTO_INCREMENT = 0;

其他回答

从MySQL 5.6开始,由于在线DDL(注意算法=就地),以下方法的工作速度更快:

alter table tablename auto_increment=1,algorithm=就地;

此问题的最高评分答案都建议“ALTER yourtable AUTO_INCREMENT=value”。然而,这仅在alter中的值大于自动递增列的当前最大值时有效。根据MySQL 8文档:

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

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

它适用于空表:

ALTER TABLE `table_name` AUTO_INCREMENT = 1;

如果你有数据,但你想整理它,我建议使用这个:

ALTER TABLE `table_name` DROP `auto_colmn`;
ALTER TABLE `table_name` ADD  `auto_colmn` INT( {many you want} ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`auto_colmn`);

当心TRUNCATE TABLE your_TABLE将删除your_TABLE中的所有内容。

您还可以使用语法TRUNCATE表,如下所示:

TRUNCATE TABLE table_name

您可以通过以下方式重置计数器:

ALTER TABLE tablename AUTO_INCREMENT = 1

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

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

请参阅如何使用另一个表中的MAX值重置MySQL AutoIncrement?关于如何动态地获得可接受的值。