# 重置自动增量值

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

MySQL提供了一个有用的功能，称为[自动增量](http://www.yiibai.com/mysql/sequence.html)。 您可以将[自动递增属性](http://www.yiibai.com/mysql/primary-key.html)分配给表的列，以生成新行的唯一标识。 通常，使用表的主键列的自动递增属性。

无论何时在[表中插入新行](http://www.yiibai.com/mysql/insert-statement.html)，MySQL会自动将[序列](http://www.yiibai.com/mysql/sequence.html)值分配给自动增量列。

例如，如果表有`8`行，并插入新行而不指定自动增量列的值，MySQL将自动插入一个`id`为`9`的新行。

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

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

## MySQL重置自动增量值示例

首先，[创建](http://www.yiibai.com/mysql/create-table.html)一个名为`tmp`的表，并将`AUTO_INCREMENT`属性分配给`id`主键列。

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

其次，将一些样本数据[插入](http://www.yiibai.com/mysql/insert-statement.html)到`tmp`表中：

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

第三步，查询`tmp`表验证插入操作：

```sql
SELECT * FROM tmp;

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

所上查询结果所示，总共有三行，`ID`列的值分别为：`1`，`2`和`3`，现在，来看看如何重置`ID`列的自动增量值。

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

可以使用[ALTER TABLE](http://www.yiibai.com/mysql/alter-table.html)语句重置自动增量值。重置自动增量的值的`ALTER TABLE`语句的语法如下：

```sql
ALTER TABLE table_name AUTO_INCREMENT = value;
```

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

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

我们[删除](http://www.yiibai.com/mysql/delete-statement.html)`tmp`表中的`id`值为`3`的最后一个记录：

```sql
DELETE FROM tmp  WHERE ID = 3;
```

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

```sql
ALTER TABLE tmp AUTO_INCREMENT = 3;
```

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

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

SELECT 
    *
FROM
    tmp;
```

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

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

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

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

[TRUNCATE TABLE](http://www.yiibai.com/mysql/truncate-table.html)语句删除表的所有数据，并将`auto_increment`值重置为`0`。 下面说明了`TRUNCATE TABLE`语句的语法：

```sql
TRUNCATE TABLE table_name;
```

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

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

您可以使用一对语句：[DROP TABLE](http://www.yiibai.com/mysql/drop-table)和[CREATE TABLE](http://www.yiibai.com/mysql/create-table/)来重置自动增量列。

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

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

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