题 如何重置MySQL中的AUTO_INCREMENT?


我怎么能够 重启 该 AUTO_INCREMENT 一个领域?我希望它开始计数 1 再次。


984
2018-01-19 08:37


起源


您可以在网站上获得更好的DBA响应 dba.stackexchange.com - Rowland Shaw
您可能也想要清空表格: TRUNCATE TABLE yourTableName; - Konerak
可能重复 MySQL:重新排序/重置自动增量主键? - outis
是的,截断表在这种情况下是最好的。它还将自动增量开始重置为1。 - raidsan
有时您没有TRUNCATE权限,因为这需要DROP权限。 - Luke Cousins


答案:


您可以使用以下命令重置计数器

ALTER TABLE tablename AUTO_INCREMENT = 1

对于InnoDB,您无法设置 auto_increment 值低于或等于当前最高指数。 (引自 ViralPatel):

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

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


1658
2018-01-19 08:39



对于填满的表格,这可能需要永远。小心这个: stackoverflow.com/questions/2681869/... - B T
这是一个 circular reference - Besnik
哈,在这里我再次使用Google来解决这个问题。怎么样,4个月前我? - James Huckabone
哦具有讽刺意味的是,这是谷歌“mysql自动增量重置”的第一个结果 :D - Doorknob
请记住,MySql将创建一个新表,具有相同的结构和新的auto_increment值,并复制原始表中的所有记录,删除原始表并重命名新表。如果表很大,这可能会对生产环境产生相当大的性能影响(和磁盘空间)。 - Rostol


ALTER TABLE tablename AUTO_INCREMENT = 1

121
2018-01-19 08:39



我可以知道你的答案与之前的答案有什么区别 - Praveen Srinivasan
@PraveenSrinivasan没有区别,我们同时添加了它们 - boobiq
就个人而言,我认为这两个对AUTO_INCREMENT问题的答案都有并发冲突是很好的事情:-) - Mark Goldfain
@MarkGoldfain是的! - ncomputers
为underdawg一票!!!! - agfa555


就像这样:

ALTER TABLE tablename AUTO_INCREMENT = value;

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


52
2018-01-19 08:40



reset 意味着将其设置为默认值...因此您可以将“值”替换为1 - Besnik


SET  @num := 0;

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

ALTER TABLE your_table AUTO_INCREMENT =1;

我想这会做到的


50
2018-05-04 16:21



这个问题已经有了适当的答案。而且,你的 UPDATE 将更新所有值 id 柱。 - Kermit
测试工作100% lh4.googleusercontent.com/-8v6M_WSkdqs/U2Zs7nVkiwI/AAAAAAAACmI/... - tronghiep92
OP并未声明他们正在重新排序现有行。 - Kermit
谢谢,这个解决方案很完美,也适用于INNODB。 - Ali Raza
完整而完美的答案。但我怀疑当我们插入一个新值时,该值的PK是什么。无论是1还是下一个PK? - Prifulnath


enter image description here使用phpmyadmin在“操作”选项卡下有一种非常简单的方法,您可以在表格选项中设置自动增量到您想要的数字。


37
2018-05-03 20:20



你需要在那之后立即重启mysql服务/服务器。 - Cyber
我认为您不需要在此之后重新启动服务器。 PhpAdmin将运行命令来更改增量起始点。 - Kareem
这对于innodb引擎不起作用 - Karan Ahuja


对我有用的最佳解决方案:

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,我不需要知道当前的最大值! 这样,自动增量计数器将重置,它将从存在的最大值自动启动。


29
2017-09-16 22:39



它将在information_schema上设置NULL auto-inc值;查 SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ; - K-Gun
我在5.6.x版本上进行了测试,这非常有效,KeremGüneş的查询返回了最大值加一,而不是如上所述。 (可能在第一次查询后设置为null,但不是在第二次查询之后)我相信这是InnoDB的最佳解决方案。 - Frank Forte
在innodb上工作得很好.-谢谢! - Gerfried
与set explicit value相同:“创建一个新表,具有相同的结构和新的auto_increment值并复制原始表中的所有记录,删除原始表并重命名新表。这可能会产生相当大的性能影响(和磁盘空间)在表格很大的情况下,在生产环境中。“但更糟糕的是因为需要两次全副本表。 - Enyby


有很好的选择 如何重置MySQL自动增量列

注意 ALTER TABLE tablename AUTO_INCREMENT = value; 不  为InnoDB工作


20
2017-09-19 09:14



你是如何用InnoDB做的? - EmptyArsenal
它确实适用于InnoDB,至少在MySQL 5.1.73上。 - Eduardo
使用MySQL v 5.6.2对我很好 - Eddie B
我有一个类似的问题,我从表中删除记录后,自动增量字段没有重置。 TRUNCATE似乎有效。我认为以下解决方案可以帮助缓解这种情况,从而消除自动增量,然后重新应用。 - Craig Maloney


这个问题的最高评分答案都建议“ALTER yourtable AUTO_INCREMENT = value”。但是,这只适用于 value 在alter中大于autocrecrement列的当前最大值。 根据MySQL文档

您无法将计数器重置为小于或等于任何值的值   已经被使用过了。对于MyISAM,如果值小于或等于   到当前在AUTO_INCREMENT列中的最大值,该值   重置为当前最大值加1。对于InnoDB,您可以使用   ALTER TABLE ... AUTO_INCREMENT =从MySQL 5.0.3开始的值,但如果是   value小于列中的当前最大值,没有错误   发生并且当前序列值不会更改。

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


16
2017-12-09 20:39