如何重置字段的AUTO_INCREMENT
?我希望它再次从1
开始计数。
您可以使用以下命令重置计数器
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?,了解如何动态获取可接受的值。
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 !!!
您还可以使用语法TRUNCATE
表,如下所示:TRUNCATE TABLE table_name
谨防!! TRUNCATE TABLE your_table
将删除你的your_table
中的所有内容!
它适用于空表:
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`);
这是我的解决方案,但如果您的列有约束或作为外键连接到其他表,我不建议这样做,因为它会产生不良影响或甚至无法工作。
ALTER TABLE tbl_name DROP COLUMN column_id
ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST
这很好用!
我试图改变表并将auto_increment设置为1,但它不起作用。我决定删除我正在递增的列名,然后使用您的首选名称创建一个新列,并将该列设置为从开头开始递增。
您可以简单地截断表以重置序列
TRUNCATE TABLE TABLE_NAME
从MySQL 5.6开始,由于online DDL(注意algorithm=inplace
),下面的方法工作得更快:
alter table tablename auto_increment=1, algorithm=inplace;
要更新最新加一个ID
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
ALTER TABLE表名AUTO_INCREMENT = 1
ALTER TABLE tablename AUTO_INCREMENT = 1
我用Google搜索并发现了这个问题,但我真正想要的答案符合两个标准:
由于我无法在这里找到我想要的东西,我从各种答案中拼出了答案并在此处分享。
几点注意事项:
id
,类型为int
作为主键创建一个这样的存储过程:
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
注意:分隔符部分至关重要。因此,如果您从此问题中的顶部选定答案进行复制和粘贴,则他们往往不会因此而工作。
运行后,我应该看到存储过程
如果需要更改存储过程,则需要删除存储过程,然后选择再次运行。
这次你可以简单地使用普通的MySQL查询。
call reset_autoincrement('products');
最初来自我自己的https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc中的SQL查询注释,并适用于StackOverflow
我建议你去查询浏览器并执行以下操作:
在表格中输入新行后,自动增量应重置为1。
如果您尝试添加auto_increment字段值已存在的行,我不知道会发生什么。
希望这有帮助!
最好的方法是使用AI删除该字段并使用AI再次添加它,适用于所有表
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
我想这会做到的
就像这样:
ALTER TABLE tablename AUTO_INCREMENT = value;
使用phpmyadmin在“操作”选项卡下有一种非常简单的方法,您可以在表格选项中设置自动增量到您想要的数字。
对我有用的最佳解决方案:
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,我不需要知道当前的最大值!这样,自动增量计数器将重置,它将从存在的最大值自动启动。
在How To Reset MySQL Autoincrement Column有很好的选择
请注意,ALTER TABLE tablename AUTO_INCREMENT = value;
不适用于InnoDB
添加更新,因为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
我的测试还显示表没有被复制,只是改变了值。
这个问题的最高评分答案都建议“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。