是否有可能删除表中的整个数据并插入 id 从 1 开始的新行
当我们尝试插入 id 将是最后插入的行 id+1 的新行时,删除命令有助于从表中删除数据(如果最后插入的 id 为 5,则新 id 应为 6)但我想将该 id 存储为 1
除截断命令以外的任何建议,提前致谢
删除所有记录后
ALTER TABLE tablename AUTO_INCREMENT = 1
笔记
来自 MySQL 文档 :链接
您不能将计数器重置为小于或等于任何已使用的值。对于 MyISAM,如果该值小于或等于 AUTO_INCREMENT 列中当前的最大值,则将该值重置为当前最大值加一。对于 InnoDB,如果该值小于该列中当前的最大值,则不会发生错误,并且当前序列值不会改变。
我从你的描述中推测,“id”是一个身份列?
在这种情况下,
TRUNCATE TABLE tablename;
同时删除所有行,并将标识字段重置为再次从 1 填充。
如果您使用该TRUNCATE
命令,它将删除所有行并重置自动增量值:
TRUNCATE tablename;
它将重置自动增量值。从上面链接的文档中:
如果表包含标识列,则该列的计数器将重置为为该列定义的种子值。如果没有定义种子,则使用默认值 1。要保留标识计数器,请改用 DELETE。
根据 OP 的要求,@MudassirHasan 的回答是最好的解决方案。
但是还有另一种方法,但稍微冗长的方法可以做到这一点。
您可以使用ALTER MODIFY
语句从 中删除AUTO_INCREMENT
属性id
,然后再次使用语句将属性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
语句从列中删除AUTO_INCREMENT
属性id
ALTER TABLE my_table
-> MODIFY id INT UNSIGNED NOT NULL;
同样,我使用ALTER MODIFY
语句将属性重新添加AUTO_INCREMENT
到列id
ALTER TABLE my_table
-> MODIFY id INT UNSIGNED NOT NULL AUTO_INCREMENT;
"abc"
现在,我在列中添加了一个示例值col1
-
INSERT INTO my_table (col1) VALUES
-> ("abc");
SELECT * FROM my_table;
+----+------+
| id | col1 |
+----+------+
| 1 | abc |
+----+------+
新插入的行以id
=开头1
您将需要执行以下两个命令sequence
:
首先删除表中的所有数据
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;
但是,如果您的表与其他表有关系,那么您的意愿不是一个好的解决方案。