如何 重置 字段的AUTO_INCREMENT
?我希望它再次从1
开始计数。
答案 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;
答案 4 :(得分:38)
在#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
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)
表的自动递增计数器可以通过两种方式(重新)设置:
答案 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搜索并找到了这个问题,但我真正要寻找的答案符合两个条件:
由于我在这里找不到想要的东西,因此我将各种答案中的答案拼凑起来,并在此处共享。
几件事要注意:
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 ;
然后运行它。
在运行之前,当您查看数据库中的“存储过程”时,它看起来像这样。
运行时,我只需选择存储过程,然后按“运行选择”即可。
注意:定界符部分至关重要。因此,如果您从该问题的最前面选择的答案中复制并粘贴,则由于这些原因它们往往不起作用。
运行后,我应该看到存储过程
如果需要更改存储过程,则需要删除存储过程,然后选择再次运行。
这次,您可以简单地使用普通的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)
我建议您转到查询浏览器并执行以下操作:
在表格中输入新行后,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);