重置自动增量值

在本教程中,我们将向您展示如何重置MySQL中AUTO_INCREMENT列的自动增量值。

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

无论何时在表中插入新行,MySQL会自动将序列值分配给自动增量列。

例如,如果表有8行,并插入新行而不指定自动增量列的值,MySQL将自动插入一个id9的新行。

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

在MySQL中,可以以各种方式重置自动增量值。

MySQL重置自动增量值示例

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

USE testdb;
CREATE TABLE tmp (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(45) DEFAULT NULL,
  PRIMARY KEY (id)
);

其次,将一些样本数据插入tmp表中:

INSERT INTO tmp(name)
VALUES('test 1'),
      ('test 2'),
      ('test 3');

第三步,查询tmp表验证插入操作:

SELECT * FROM tmp;

+----+--------+
| id | name   |
+----+--------+
|  1 | test 1 |
|  2 | test 2 |
|  3 | test 3 |
+----+--------+
3 rows in set

所上查询结果所示,总共有三行,ID列的值分别为:123,现在,来看看如何重置ID列的自动增量值。

MySQL通过使用ALTER TABLE语句重置自动增量值

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

ALTER TABLE table_name AUTO_INCREMENT = value;

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

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

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

DELETE FROM tmp  WHERE ID = 3;

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

ALTER TABLE tmp AUTO_INCREMENT = 3;

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

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

SELECT 
    *
FROM
    tmp;

执行上面查询语句,得到以下结果 -

+----+-----------------+
| id | name            |
+----+-----------------+
|  1 | test 1          |
|  2 | test 2          |
|  4 | MySQL example 3 |
+----+-----------------+
3 rows in set

现在,表中有三行记录,最后一个自动递增值为3而不是4,这是像我们所预期的那样。

MySQL使用TRUNCATE TABLE语句重置自动增量值

TRUNCATE TABLE语句删除表的所有数据,并将auto_increment值重置为0。 下面说明了TRUNCATE TABLE语句的语法:

TRUNCATE TABLE table_name;

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

MySQL使用DROP TABLE和CREATE TABLE语句重置自动增量值

您可以使用一对语句:DROP TABLECREATE TABLE来重置自动增量列。

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

DROP TABLE table_name;
CREATE TABLE table_name(...);

在本教程中,您已经学会了如何以各种方式重置MySQL中的自动增量值。 第一种方法是最好的,因为它是最简单的方法,没有副作用。

Last updated