# 重置自动增量值

在本教程中，我们将向您展示如何重置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中的自动增量值。 第一种方法是最好的，因为它是最简单的方法，没有副作用。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hezhiqiang-book.gitbook.io/mysql/di-er-zhang/zhong-zhi-zi-dong-zeng-liang-zhi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
