如何重置MySQL中的AUTO_INCREMENT?

问题描述 投票:1089回答:22

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

mysql sql auto-increment
22个回答
1794
投票

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

ALTER TABLE tablename AUTO_INCREMENT = 1

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

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

请参阅How to Reset an MySQL AutoIncrement using a MAX value from another table?,了解如何动态获取可接受的值。


12
投票
ALTER TABLE news_feed DROP id

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

我在我的一些脚本中使用了这个,id字段被droped然后添加回以前的设置,数据库表中的所有现有字段都填入了新的自动增量值,这也适用于InnoDB。

请注意,表中的所有字段都将被重新计算,并且将包含其他ID !!!


11
投票

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

谨防!! TRUNCATE TABLE your_table将删除你的your_table中的所有内容!


4
投票

它适用于空表:

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`);

3
投票

这是我的解决方案,但如果您的列有约束或作为外键连接到其他表,我不建议这样做,因为它会产生不良影响或甚至无法工作。

>首先:放下柱子

ALTER TABLE tbl_name DROP COLUMN column_id

>第二:重新创建列并将其设置为FIRST,如果您希望它作为我假设的第一列。

ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST

这很好用!


1
投票

我试图改变表并将auto_increment设置为1,但它不起作用。我决定删除我正在递增的列名,然后使用您的首选名称创建一个新列,并将该列设置为从开头开始递增。


1
投票

您可以简单地截断表以重置序列

TRUNCATE TABLE TABLE_NAME

1
投票

可以通过两种方式(重新)设置表的自动递增计数器:

  1. 通过执行查询,就像已经解释的其他人一样: ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
  2. 使用Workbench或其他可视化数据库设计工具。我将在Workbench中展示它是如何完成的 - 但它在其他工具中也应该没有太大的不同。右键单击所需的表格,然后从上下文菜单中选择Alter table。在底部,您可以看到更改表格的所有可用选项。选择Options,你会得到这样的形式:enter image description here 然后在字段Auto increment中设置所需的值,如图所示。这基本上将执行第一个选项中显示的查询。

1
投票

从MySQL 5.6开始,由于online DDL(注意algorithm=inplace),下面的方法工作得更快:

alter table tablename auto_increment=1, algorithm=inplace;


0
投票

要更新最新加一个ID

 ALTER TABLE table_name AUTO_INCREMENT = 
 (SELECT (id+1) id FROM table_name order by id desc limit 1);

0
投票

ALTER TABLE表名AUTO_INCREMENT = 1


136
投票
ALTER TABLE tablename AUTO_INCREMENT = 1

0
投票

我用Google搜索并发现了这个问题,但我真正想要的答案符合两个标准:

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

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

几点注意事项:

  1. 有问题的表是InnoDB
  2. 该表使用字段id,类型为int作为主键
  3. 纯粹在MySQL中执行此操作的唯一方法是使用存储过程
  4. 我下面的图片使用SequelPro作为GUI。您应该能够根据首选的MySQL编辑器进行调整
  5. 对于debian-linux-gnu,我在MySQL Ver 14.14 Distrib 5.5.61上进行了测试

第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 ;

然后运行它。

在运行之前,当您查看数据库中的存储过程时,它看起来像这样。

enter image description here

当我运行时,我只需选择存储过程并按Run Selection

enter image description here

注意:分隔符部分至关重要。因此,如果您从此问题中的顶部选定答案进行复制和粘贴,则他们往往不会因此而工作。

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

enter image description here

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

第2步:调用存储过程

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

call reset_autoincrement('products');

最初来自我自己的https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc中的SQL查询注释,并适用于StackOverflow


-2
投票

我建议你去查询浏览器并执行以下操作:

  1. 转到schemata并找到要更改的表。
  2. 右键单击并选择copy create statement。
  3. 打开结果选项卡并粘贴create语句。
  4. 转到create语句的最后一行并查找Auto_Increment = N,(其中N是auto_increment字段的当前数字。)
  5. 将N替换为1。
  6. 按ctrl + enter。

在表格中输入新行后,自动增量应重置为1。

如果您尝试添加auto_increment字段值已存在的行,我不知道会发生什么。

希望这有帮助!


-2
投票

最好的方法是使用AI删除该字段并使用AI再次添加它,适用于所有表


64
投票
SET  @num := 0;

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

ALTER TABLE your_table AUTO_INCREMENT =1;

我想这会做到的


53
投票

就像这样:

ALTER TABLE tablename AUTO_INCREMENT = value;

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


38
投票

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


31
投票

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

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


19
投票

How To Reset MySQL Autoincrement Column有很好的选择

请注意,ALTER TABLE tablename AUTO_INCREMENT = value;不适用于InnoDB


18
投票

添加更新,因为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

我的测试还显示表没有被复制,只是改变了值。


18
投票

这个问题的最高评分答案都建议“ALTER yourtable AUTO_INCREMENT = value”。但是,这仅在alter中的value大于自动增量列的当前最大值时有效。 According to the MySQL 8 documentation

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

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

© www.soinside.com 2019 - 2024. All rights reserved.