5

是否有可能删除表中的整个数据并插入 id 从 1 开始的新行

当我们尝试插入 id 将是最后插入的行 id+1 的新行时,删除命令有助于从表中删除数据(如果最后插入的 id 为 5,则新 id 应为 6)但我想将该 id 存储为 1

除截断命令以外的任何建议,提前致谢

4

7 回答 7

8

删除所有记录后

ALTER TABLE tablename AUTO_INCREMENT = 1

笔记

来自 MySQL 文档链接

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

于 2013-07-11T05:12:15.947 回答
2

我从你的描述中推测,“id”是一个身份列?

在这种情况下,

TRUNCATE TABLE tablename;

同时删除所有行,并将标识字段重置为再次从 1 填充。

于 2013-07-11T05:16:50.100 回答
1

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

TRUNCATE tablename;
于 2013-07-11T05:15:59.230 回答
1

采用TRUNCATE TABLE [tableName]

它将重置自动增量值。从上面链接的文档中:

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

于 2013-07-11T05:16:07.150 回答
0

根据 OP 的要求,@MudassirHasan 的回答是最好的解决方案。

但是还有另一种方法,但稍微冗长的方法可以做到这一点。

您可以使用ALTER MODIFY语句从 中删除AUTO_INCREMENT属性id,然后再次使用语句将属性ALTER MODIFY重新添加到。这在下面演示 -AUTO_INCREMENTid

这里的示例表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

于 2021-09-28T11:10:53.303 回答
-1

您将需要执行以下两个命令sequence

首先删除表中的所有数据

delete TABLE_NAME

然后将ID设置为1

insert into TABLE_NAME(ID) values(1)
于 2013-07-11T05:16:12.473 回答
-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;

但是,如果您的表与其他表有关系,那么您的意愿不是一个好的解决方案。

于 2013-07-11T05:22:16.287 回答