如何重置MySQL中的AUTO_INCREMENT?

时间:2012-01-19 08:37:50

标签: mysql sql auto-increment

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

25 个答案:

答案 0 :(得分:1809)

您可以使用以下方法重置计数器:

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? ,了解如何动态获取可接受的值。

答案 1 :(得分:137)

ALTER TABLE tablename AUTO_INCREMENT = 1

答案 2 :(得分:65)

SET  @num := 0;

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

ALTER TABLE your_table AUTO_INCREMENT =1;

我认为这样做会

答案 3 :(得分:53)

就像这样:

ALTER TABLE tablename AUTO_INCREMENT = value;

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

答案 4 :(得分:38)

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

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

答案 6 :(得分:19)

How To Reset MySQL Autoincrement Column

中提供了很好的选择

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

答案 7 :(得分: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

我的测试还显示该表未被复制,只是更改了值。

答案 8 :(得分:18)

此问题的最高评分答案均建议“ALTER yourtable AUTO_INCREMENT = value”。但是,这仅在alter中的value大于autoincrement列的当前最大值时有效。 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

答案 9 :(得分: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 !!!。

答案 10 :(得分:11)

你也可以像这样使用语法TRUNCATE表: TRUNCATE TABLE table_name

提示!! TRUNCATE TABLE your_table 删除your_table中的所有内容 !!

答案 11 :(得分: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`);

答案 12 :(得分: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

这很好!

答案 13 :(得分:1)

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

答案 14 :(得分:1)

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

TRUNCATE TABLE TABLE_NAME

答案 15 :(得分:1)

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

  1. 通过执行查询,就像已经解释的其他人一样:

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

  2. 使用Workbench或其他可视化数据库设计工具。我将在Workbench中展示它是如何完成的 - 但它在其他工具中也应该没有太大的不同。右键单击所需的表格,然后从上下文菜单中选择Alter table。在底部,您可以看到更改表格的所有可用选项。选择Options,您将获得此表单: enter image description here

    然后在字段Auto increment中设置所需的值,如图所示。 这基本上将执行第一个选项中显示的查询。

答案 16 :(得分:1)

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

alter table tablename auto_increment=1, algorithm=inplace;

答案 17 :(得分:0)

更新最新加一个ID

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

答案 18 :(得分:0)

SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;

答案 19 :(得分:0)

尝试运行此查询

 ALTER TABLE tablename AUTO_INCREMENT = value;

或尝试使用此查询获取重置自动增量

 ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;

并设置自动增量,然后运行此查询

  ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;

答案 20 :(得分:0)

我用Google搜索并找到了这个问题,但我真正要寻找的答案符合两个条件:

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

由于我在这里找不到想要的东西,因此我将各种答案中的答案拼凑起来,并在此处共享。

几件事要注意:

  1. 有问题的表是InnoDB
  2. 该表使用类型为id的字段int作为主键
  3. 仅在MySQL中执行此操作的唯一方法是使用存储过程
  4. 我下面的图像使用SequelPro作为GUI。您应该能够根据自己喜欢的MySQL编辑器对其进行修改
  5. 我已经在debian-linux-gnu的MySQL 版本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

运行时,我只需选择存储过程,然后按“运行选择”即可。

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

答案 21 :(得分:0)

ALTER TABLE tablename AUTO_INCREMENT = 1

答案 22 :(得分:-2)

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

答案 23 :(得分:-2)

我建议您转到查询浏览器并执行以下操作:

  1. 转到schemata并找到要更改的表。
  2. 右键单击并选择复制create statement。
  3. 打开结果标签并粘贴创建语句。
  4. 转到create语句的最后一行,查找Auto_Increment = N, (其中N是auto_increment字段的当前编号。)
  5. 将N替换为1。
  6. ctrl + 输入
  7. 在表格中输入新行后,Auto_increment应重置为1。

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

    希望这有帮助!

答案 24 :(得分:-2)

您需要遵循Miles M注释的建议,这是一些用于修复mysql范围的代码。您还需要打开my.ini(Mysql)并将max_execution_time = 60更改为max_execution_time = 6000;用于大型数据库。 不要使用“ ALTER TABLE表名AUTO_INCREMENT = 1”,它将删除数据库中的所有内容。

$con=mysqli_connect($dbhost, $dbuser, $dbpass, $database);
$res=mysqli_query($con, "select * FROM data WHERE id LIKE id ORDER BY id ASC");
$count = 0;  
while ($row = mysqli_fetch_array($res)){
         $count++;
        
    mysqli_query($con, "UPDATE data SET id='".$count."' WHERE id='".$row['id']."'");
    
         }
         echo 'Done reseting id';
         mysqli_close($con);