MySQL 重置自增值

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

例如,我们有一个已经包含十行的表。接下来,如果我们添加一个新行而不给 auto-increment 列赋值,MySQL 会自动添加一个id=11的新行。

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

MySQL 允许各种方式来重置自动增量列值。这些方法是:

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

首先,我们将创建一个名为“ Animals ”的表,并为id 列分配自动增量属性。请参阅以下声明: 

mysql> CREATE TABLE Animals(    
id int NOT NULL AUTO_INCREMENT,     
name CHAR(30) NOT NULL,     
PRIMARY KEY (id));   

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

mysql> INSERT INTO Animals (name) VALUES     
('Tiger'),('Dog'),('Penguin'),    
 ('Camel'),('Cat'),('Ostrich');  

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

mysql> SELECT * FROM Animals;   

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

让我们以这张表来详细演示重置自增列值的方法。

一、使用 ALTER TABLE 语句

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

语法

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

ALTER TABLE table_name AUTO_INCREMENT = value;  

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

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

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

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

让我们删除表中id = 6的最低行,如下所示:

mysql> DELETE FROM Animals WHERE id = 6;  

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

mysql> ALTER TABLE Animals AUTO_INCREMENT = 6;  

如果我们将新记录插入到这个表中,MySQL 开始生成行 id 为 6。执行以下查询:

mysql> INSERT INTO Animals (name)  
VALUES ('Rabbit');  

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

二、使用 TRUNCATE TABLE 语句

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

语法

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

TRUNCATE TABLE tab_name;  

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

三、使用 DROP TABLE 和 CREATE TABLE 语句

我们还可以使用一对 DROP TABLE 和 CREATE TABLE 语句来重置自动增量列值。此方法从表中永久删除完整记录。

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

DROP TABLE table_name;  
CREATE TABLE table_name( fiels_name(s) datatypes);  

 

热门文章

优秀文章