插入ID为1的新行

5

有没有可能删除表中的所有数据,并插入新行,其ID从1开始

删除命令可以帮助我们从表中删除数据,当我们尝试插入新行时,该行的ID将为最后插入的行ID + 1(如果最后插入的ID为5,则新ID应为6),但我希望将该ID存储为1

除了truncate命令之外,还有其他建议吗?谢谢提前。


你能分享一下 TRUNCATE 有什么问题吗? - peterm
7个回答

8

在删除所有记录后,执行以下操作:

ALTER TABLE tablename AUTO_INCREMENT = 1

注意

来自MySQL文档 : 链接

无法将计数器重置为小于或等于已使用过的任何值。对于MyISAM,如果该值小于或等于当前AUTO_INCREMENT列中的最大值,则将该值重置为当前最大值加一。对于InnoDB,如果该值小于列中当前最大值,则不会发生错误,当前序列值也不会更改。


2
我猜测根据你的描述,“id”是一个标识列?
如果是这样,
TRUNCATE TABLE tablename;

同时删除所有行并重置标识字段以再次从1开始填充。


2
我没有点踩,但是点踩可能是因为楼主明确要求使用TRUNCATE以外的解决方案。尽管如此,TRUNCATE仍然是更好的解决方案。 - Bill Karwin

1
如果您使用TRUNCATE命令,它将删除所有行并重置自动增量值:
TRUNCATE tablename;

1

使用TRUNCATE TABLE [tableName]命令,可以重置自增值。根据上面链接的文档:

如果表中包含标识列,则该列的计数器将被重置为为该列定义的种子值。如果未定义种子,则使用默认值1。要保留标识计数器,请改用DELETE。


0

根据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 开始

-1

您需要按照以下顺序执行两个命令:

首先删除表中的所有数据

delete TABLE_NAME

然后将ID设置为1

insert into TABLE_NAME(ID) values(1)

-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;

但是,如果您的表与其他表存在关联,则您的意愿并不是一个好的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接