如何重置字段的AUTO_INCREMENT?

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


当前回答

我搜索了一下,发现了这个问题,但我真正想要的答案满足两个标准:

使用纯MySQL查询将现有表自动增量重置为max(id)+1

由于我在这里找不到我想要的东西,我从各种答案中拼凑出了答案,并在这里分享。

需要注意的几点:

所讨论的表是InnoDB该表使用类型为int的字段id作为主键在MySQL中实现这一点的唯一方法是使用存储过程我下面的图片使用SequelPro作为GUI。您应该能够根据您首选的MySQL编辑器对其进行调整我已经在MySQL Ver 14.14 Distrib 5.5.61上为debian linux gnu测试了这一点

步骤1:创建存储过程

创建如下存储过程:

DELIMITER //
CREATE PROCEDURE reset_autoincrement(IN tablename varchar(200))
BEGIN

      SET @get_next_inc = CONCAT('SELECT @next_inc := max(id) + 1 FROM ',tablename,';');
      PREPARE stmt FROM @get_next_inc;
      EXECUTE stmt;
      SELECT @next_inc AS result;
      DEALLOCATE PREPARE stmt;

      set @alter_statement = concat('ALTER TABLE ', tablename, ' AUTO_INCREMENT = ', @next_inc, ';');
      PREPARE stmt FROM @alter_statement;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;
END //
DELIMITER ;

然后运行它。

在运行之前,当您查看数据库中的“存储过程”时,情况如下。

运行时,只需选择存储过程并按run Selection

注意:分隔符部分至关重要。因此,如果你复制并粘贴这个问题中最热门的答案,它们往往不会因为这个原因而起作用。

运行后,我应该看到存储过程

如果需要更改存储过程,则需要删除存储过程,然后选择再次运行。

步骤2:调用存储过程

这次您可以简单地使用普通MySQL查询。

call reset_autoincrement('products');

最初来自我自己的SQL查询注释https://simkimsia.com/reset-mysql-autoincrement-to-max-id-plus-1/并适用于堆栈溢出。

其他回答

SET  @num := 0;

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

ALTER TABLE your_table AUTO_INCREMENT =1;

phpMyAdmin在“操作”选项卡下有一个非常简单的方法。在表选项中,您可以将自动增量设置为所需的数字。

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

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

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

最适合我的解决方案:

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 TABLE tablename AUTO_INCREMENT = 1