有没有可能删除表中的所有数据,并插入新行,其ID从1开始
删除命令可以帮助我们从表中删除数据,当我们尝试插入新行时,该行的ID将为最后插入的行ID + 1(如果最后插入的ID为5,则新ID应为6),但我希望将该ID存储为1
除了truncate命令之外,还有其他建议吗?谢谢提前。
在删除所有记录后,执行以下操作:
ALTER TABLE tablename AUTO_INCREMENT = 1
注意
来自MySQL文档 : 链接
无法将计数器重置为小于或等于已使用过的任何值。对于MyISAM,如果该值小于或等于当前AUTO_INCREMENT列中的最大值,则将该值重置为当前最大值加一。对于InnoDB,如果该值小于列中当前最大值,则不会发生错误,当前序列值也不会更改。
TRUNCATE TABLE tablename;
同时删除所有行并重置标识字段以再次从1开始填充。
TRUNCATE
命令,它将删除所有行并重置自动增量值:TRUNCATE tablename;
使用TRUNCATE TABLE [tableName]
命令,可以重置自增值。根据上面链接的文档:
如果表中包含标识列,则该列的计数器将被重置为为该列定义的种子值。如果未定义种子,则使用默认值1。要保留标识计数器,请改用DELETE。
根据OP的要求,@MudassirHasan的答案是最佳解决方案。
但是还有另一种稍微繁琐的方法可以实现相同的效果。
您可以使用ALTER MODIFY
语句从id
中删除AUTO_INCREMENT
属性,然后再次使用ALTER MODIFY
语句将AUTO_INCREMENT
属性重新添加到id
中。下面演示了这一点 -
这里的示例表my_table
具有以下结构 -
DESCRIBE my_table;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int unsigned | NO | PRI | NULL | auto_increment |
| col1 | varchar(40) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
INSERT INTO my_table (col1) VALUES
-> ("abc"),
-> ("def"),
-> ("ghi");
SELECT * FROM my_table;
+----+------+
| id | col1 |
+----+------+
| 1 | abc |
| 2 | def |
| 3 | ghi |
+----+------+
my_table
中删除所有记录 -DELETE FROM my_table;
ALTER MODIFY
语句从列id
中删除AUTO_INCREMENT
属性。ALTER TABLE my_table
-> MODIFY id INT UNSIGNED NOT NULL;
我再次使用ALTER MODIFY
语句,向列id
重新添加AUTO_INCREMENT
属性。
ALTER TABLE my_table
-> MODIFY id INT UNSIGNED NOT NULL AUTO_INCREMENT;
col1
添加一个示例值"abc"
-INSERT INTO my_table (col1) VALUES
-> ("abc");
SELECT * FROM my_table;
+----+------+
| id | col1 |
+----+------+
| 1 | abc |
+----+------+
id
= 1
开始您需要按照以下顺序
执行两个命令:
首先删除表中的所有数据
delete TABLE_NAME
然后将ID设置为1
insert into TABLE_NAME(ID) values(1)
根据 @mhasan 的回答
ALTER TABLE `tablename` AUTO_INCREMENT = 1
有一种方法可以这样做。
另一种方法是删除 id 列并重新创建它。
ALTER TABLE `tablename` DROP `id`;
ALTER TABLE `tablename` AUTO_INCREMENT = 1;
ALTER TABLE `tablename` ADD `id` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
但是,如果您的表与其他表存在关联,则您的意愿并不是一个好的解决方案。
TRUNCATE
有什么问题吗? - peterm