MySQL 重置自增

17 Mar 2025 | 4 分钟阅读

自增是一个 MySQL 提供的有用的功能。它始终为表中新插入的每一行生成一个唯一的标识。通常,我们将自增属性用于表中的主键字段。每次我们将新记录插入到表中时,MySQL 都会自动将值递增到自增列。

例如,我们有一个已经包含十行的表。接下来,如果我们添加一个新行而不为自增列提供值,MySQL 将自动添加一个新行,其中id=11

有时,我们需要删除这些行并重置自增列,这样当我们下次插入表时,第一条记录的标识将具有主键值 1。

MySQL 提供了多种方法来重置自增列的值。这些方法是

  1. 使用 ALTER TABLE 语句
  2. 使用 TRUNCATE TABLE 语句
  3. 使用 DROP TABLE 和 CREATE TABLE 语句对

首先,我们将创建一个名为“Animals”的表,并将id 列分配自增属性。请参阅下面的语句

接下来,我们将一些示例数据插入“Animals”表中,如下所示

现在,我们将执行以下语句来验证插入操作

我们应该得到以下输出。在插入语句中,我们没有为自增列指定任何值。但我们可以从输出中观察到,MySQL 会自动为该字段生成一个按顺序排列的唯一数字。

MySQL Reset Auto-Increment

让我们以这个表为例,详细演示重置自增列值的方法。

使用 ALTER TABLE 语句

ALTER TABLE 语句用于更改表或任何表字段的名称。它还用于在表中添加、删除或重置现有列。MySQL 还允许使用此语句在需要时重置自增列的值。

语法

以下是重置自增列值的 ALTER TABLE 语句的语法

在此语法中,我们在 ALTER TABLE 子句后首先指定了表名。接下来,我们在表达式中指定要重置的值,即AUTO_INCREMENT = value

需要注意的是,MySQL 不允许重置小于或等于已使用值的值。例如,如果我们正在使用 InnoDB,该值不应小于或等于自增列的当前最大值。

对于MyISAM,如果指定的值小于或等于 auto_increment 列的最大值,则该值将重置为当前最大值加一。

对于InnoDB,如果指定的值小于自增列的当前最大值,MySQL 不会发出任何错误,并且当前序列也不会改变。

如下删除表中 id = 6 的最小行

如果我们添加一条新记录,MySQL 将为该记录分配id = 7。但如果我们想将此列重置为最后一个值,我们可以使用ALTER TABLE语句,如下所示

如果我们向此表插入新记录,MySQL 将开始生成行 id 为 6。执行以下查询

最后,查询表中的数据以查看效果。以下输出更清楚地解释了这一点,其中我们有六行,最后一个自增值是 6 而不是 7。

MySQL Reset Auto-Increment

使用 TRUNCATE TABLE 语句

MySQL 中的 TRUNCATE TABLE 语句会完全删除表中的数据,而不会删除表的结构,并且始终将自增列的值重置为零。

语法

以下语法说明了 TRUNCATE TABLE 语句用于重置自增列的值

需要注意的是,执行 TRUNCATE TABLE 语句后,我们无法从表中恢复已删除的数据。

使用 DROP TABLE 和 CREATE TABLE 语句

我们还可以使用 DROP TABLE 和 CREATE TABLE 语句对来重置自增列的值。此方法会永久删除表中的所有记录。

与 TRUNCATE TABLE 查询类似,DROP TABLE 和 CREATE TABLE 语句对首先删除表,然后重新创建它。因此,MySQL 将自增列的值重置为零。


下一主题MySQL Interval