如何重置字段的AUTO_INCREMENT?
我希望它再次从1开始计数。
如何重置字段的AUTO_INCREMENT?
我希望它再次从1开始计数。
当前回答
此问题的最高评分答案都建议“ALTER yourtable AUTO_INCREMENT=value”。然而,这仅在alter中的值大于自动递增列的当前最大值时有效。根据MySQL 8文档:
不能将计数器重置为小于或等于当前使用的值。对于InnoDB和MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则该值将重置为当前最大AUTO_INCREENT列值加1。
实际上,您只能更改AUTO_INCREMENT以增加自动递增列的值,而不能将其重置为1,正如OP在问题的第二部分中所要求的那样。对于实际允许您从当前最大值向下设置AUTO_INCREMENT的选项,请查看重新排序/重置自动递增主键。
其他回答
要更新到最新的加号id,请执行以下操作:
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
编辑:
SET @latestId = SELECT MAX(id) FROM table_name;
SET @nextId = @latestId + 1;
ALTER TABLE table_name AUTO_INCREMENT = @nextId;
未测试,请在运行前测试*
此问题的最高评分答案都建议“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`);
就像这样:
ALTER TABLE tablename AUTO_INCREMENT = value;
参考:13.1.9 ALTER TABLE语句
您可以通过以下方式重置计数器:
ALTER TABLE tablename AUTO_INCREMENT = 1
对于InnoDB,不能将auto_increment值设置为低于或等于当前最高索引。(引自ViralPatel):
请注意,不能将计数器重置为小于或等于的值任何已经使用过的。对于MyISAM,如果值小于大于或等于AUTO_INCREMENT中当前的最大值列,该值将重置为当前最大值加1。对于InnoDB,如果该值小于列,不会发生错误,并且当前序列值不会更改。
请参阅如何使用另一个表中的MAX值重置MySQL AutoIncrement?关于如何动态地获得可接受的值。