我怎样才能重新在AUTO_INCREMENT
一个领域?
我希望它从头开始计算1
。
TRUNCATE TABLE yourTableName;
我怎样才能重新在AUTO_INCREMENT
一个领域?
我希望它从头开始计算1
。
TRUNCATE TABLE yourTableName;
Answers:
您可以使用以下方法重置计数器:
ALTER TABLE tablename AUTO_INCREMENT = 1
对于InnoDB,您不能将auto_increment
值设置为小于或等于当前最大索引。(引自ViralPatel):
请注意,您不能将计数器重置为小于或等于已使用的任何值。对于MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则该值将重置为当前的最大值加1。对于InnoDB,如果该值小于该列中的当前最大值,则不会发生错误,并且当前序列值不会更改。
请参见如何使用另一个表中的MAX值重置MySQL自动增量?如何动态获得可接受的值。
circular reference
curcular reference
?
ALTER TABLE tablename AUTO_INCREMENT = 1
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
我认为这可以做到
UPDATE
将更新id
列中的所有值。
就像这样:
ALTER TABLE tablename AUTO_INCREMENT = value;
参考:http : //dev.mysql.com/doc/refman/5.1/en/alter-table.html
reset
意味着将其设置为默认值...因此您可以将“ value”替换为1
使用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一起使用,并且我不需要知道当前的最大值!这样,自动增量计数器将复位,并从存在的最大值开始自动启动。
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
,而ALTER TABLE tablename AUTO_INCREMENT = 1
不会没有。
这个问题的最高评分答案都建议“ ALTER yourtable AUTO_INCREMENT = value”。但是,这仅value
在alter中的值大于autoincrement列的当前最大值时才有效。 根据MySQL 8文档:
您不能将计数器重置为小于或等于当前使用的值。对于InnoDB和MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则该值将重置为当前的最大AUTO_INCREMENT列值加1。
从本质上讲,您只能更改AUTO_INCREMENT以增加autoincrement列的值,而不能将其重置为1,这是OP在问题的第二部分中提出的。对于实际上允许您将AUTO_INCREMENT从当前最大值向下设置的选项,请查看重新排序/重置自动递增主键。
由于功能在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
我的测试还显示该表未复制,仅更改了值。
如何重置MySQL自动增量列中提供了不错的选择
请注意,ALTER TABLE tablename AUTO_INCREMENT = value;
并没有对InnoDB的工作
DELETE
(或ROLLBACK
)将无法恢复ID。一个例外:重新启动(或崩溃)后,下一个id计算为MAX(id)+1
,从而有效地恢复end上已删除的id 。例外情况:MySQL 8.0保留未使用的ID。
ALTER TABLE news_feed DROP id
ALTER TABLE news_feed ADD id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)
我在一些脚本中使用了此功能,首先删除了id字段,然后使用以前的设置将其添加回去,数据库表中所有现有的字段都填充了新的自动增量值,这也应与InnoDB一起使用。
请注意,表中的所有字段将被重新计数,并将具有其他ID !!!。
您还可以使用如下语法TRUNCATE
表:
TRUNCATE TABLE table_name
谨防!! TRUNCATE TABLE your_table
将删除您所有的内容your_table
!
TRUNCATE
也会删除指定表中的所有行!
TRUNCATE
也会重置auto_increment
字段吗?我的用例是清除表中的旧数据,然后为新数据从1重新开始ID (想象一下,在测试完成后清除表以正确使用)。我以为我得DROP
整桌CREATE
再坐。
auto_increment
值,请使用DELETE FROM
代替TRUNCATE
。
它用于空表:
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`);
您可以简单地截断表以重置序列
TRUNCATE TABLE TABLE_NAME
我试图更改表并将auto_increment设置为1,但是它不起作用。我决定删除要递增的列名,然后使用您的首选名称创建一个新列,并将该新列设置为从一开始就递增。
可以通过两种方式来(重新)设置表的自动递增计数器:
ALTER TABLE表名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 ;
然后运行它。
在运行之前,当您查看数据库中的“存储过程”时,它看起来像这样。
运行时,只需选择存储过程,然后按“运行选择”
注意:定界符部分至关重要。因此,如果您从该问题的顶部选择的答案中复制和粘贴,则由于这些原因它们往往不起作用。
运行后,我应该看到存储过程
如果需要更改存储过程,则需要删除存储过程,然后选择再次运行。
这次,您可以简单地使用普通的MySQL查询。
call reset_autoincrement('products');
最初来自我自己的SQL查询笔记,网址为https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc,适用于StackOverflow
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;