如何重置字段的AUTO_INCREMENT?
我希望它再次从1开始计数。
如何重置字段的AUTO_INCREMENT?
我希望它再次从1开始计数。
当前回答
phpMyAdmin在“操作”选项卡下有一个非常简单的方法。在表选项中,您可以将自动增量设置为所需的数字。
其他回答
要更新到最新的加号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;
未测试,请在运行前测试*
我搜索了一下,发现了这个问题,但我真正想要的答案满足两个标准:
使用纯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/并适用于堆栈溢出。
您可以通过以下方式重置计数器:
ALTER TABLE tablename AUTO_INCREMENT = 1
对于InnoDB,不能将auto_increment值设置为低于或等于当前最高索引。(引自ViralPatel):
请注意,不能将计数器重置为小于或等于的值任何已经使用过的。对于MyISAM,如果值小于大于或等于AUTO_INCREMENT中当前的最大值列,该值将重置为当前最大值加1。对于InnoDB,如果该值小于列,不会发生错误,并且当前序列值不会更改。
请参阅如何使用另一个表中的MAX值重置MySQL AutoIncrement?关于如何动态地获得可接受的值。
从MySQL 5.6开始,您可以在InnoDB中使用简单的ALTERTABLE:
ALTER TABLE tablename AUTO_INCREMENT = 1;
更新文件以反映这一点:
13.1.7 ALTER TABLE语句
我的测试还显示该表未被复制。只需更改值即可。
我试图更改表并将auto_increment设置为1,但没有成功。我决定删除正在递增的列名称,然后用您的首选名称创建一个新列,并将该新列设置为从开始递增。