MySQL Reset Auto Increment Values

摘要:在本教程中,我们将向您展示在 MySQL 中重置AUTO_INCREMENT列的自动增量值的各种方法。

MySQL 为您提供了一个有用的功能,称为自动增量。您可以将AUTO_INCREMENT属性分配给表的列,以为新行生成唯一标识。通常,您对表的主键列使用AUTO_INCREMENT属性。

每当您向表中插入新行时,MySQL 都会自动为AUTO_INCREMENT列分配一个序列号。

例如,如果表有8行,并且您插入新行而没有指定自增列的值,则MySQL将自动插入id值为9的新行。

有时,您可能需要重置自动增量列的值,以便插入表中的第一条记录的标识从特定数字(例如 1)开始。

在 MySQL 中,您可以通过多种方式重置自动增量值。

MySQL重置自增值示例

首先,创建一个名为tmp的表,并将AUTO_INCREMENT属性分配给id主键列。

CREATE TABLE tmp (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(45) DEFAULT NULL,
  PRIMARY KEY (id)
);Code language: SQL (Structured Query Language) (sql)

其次,将一些示例数据插入tmp表中:

INSERT INTO tmp(name)
VALUES('test 1'),
      ('test 2'),
      ('test 3');Code language: SQL (Structured Query Language) (sql)

三、查询tmp表验证插入操作:

SELECT 
    *
FROM
    tmp;Code language: SQL (Structured Query Language) (sql)
MySQL重置自增值

我们有三行,ID 列的值为 1、2 和 3。完美!现在是时候练习重置ID列的自增值了。

使用 ALTER TABLE 语句

您可以使用ALTER TABLE语句重置自动增量值。重置自动增量值的ALTER TABLE语句的语法如下:

ALTER TABLE table_name AUTO_INCREMENT = value;Code language: SQL (Structured Query Language) (sql)

您可以在ALTER TABLE子句之后指定表名,并在表达式AUTO_INCREMENT=value中指定要重置为的value

请注意,该value必须大于或等于自增列当前的最大值。

让我们删除tmp中的最后一条记录  id值为 3 的表:

DELETE FROM tmp 
WHERE
    ID = 3;Code language: SQL (Structured Query Language) (sql)

如果插入新行,MySQL 会将 4 分配给新行的id列。但是,您可以使用ALTER TABLE语句将 MySQL 生成的数字重置为 3,如下所示:

ALTER TABLE tmp AUTO_INCREMENT = 3;Code language: SQL (Structured Query Language) (sql)

现在,我们尝试向tmp表中插入新行并从中查询数据,看看效果:

INSERT INTO tmp(name)
VALUES ('MySQL example 3');

SELECT 
    *
FROM
    tmp;Code language: SQL (Structured Query Language) (sql)
MySQL重置自动递增值示例

我们有三行,最后一个自动增量值为 3,而不是我们所期望的 4。

使用 TRUNCATE TABLE 语句

TRUNCATE TABLE语句从表中删除所有数据并将自动增量值重置为零。

下面说明了TRUNCATE TABLE语句的语法:

TRUNCATE TABLE table_name;Code language: SQL (Structured Query Language) (sql)

通过使用TRUNCATE TABLE语句,您可以永久删除表中的所有数据并将自动增量值重置为零。

使用 DROP TABLE 和 CREATE TABLE 语句

您可以使用一对语句: DROP TABLECREATE TABLE来重置自增列。请注意,此方法会永久删除表中的所有数据。

TRUNCATE TABLE语句一样,这些语句删除表并重新创建它,因此,自动增量的值将重置为零。

DROP TABLE table_name;
CREATE TABLE table_name(...);Code language: SQL (Structured Query Language) (sql)

在本教程中,您学习了如何通过多种方式重置 MySQL 中的自动增量值。第一种方法是优选的,因为它是最简单的方法并且没有副作用。

本教程有帮助吗?