MySQL RESET AUTO INCREMENT
Auto-increment是MySQL提供的一个有用的功能。它总是为每个新插入的行生成一个唯一的标识。通常,我们在表中的主键字段上使用auto-increment属性。每次我们向表中插入新记录时,MySQL会自动将值递增到auto-increment列。
例如 ,我们有一个已包含十行的表。下一步,如果我们在不给auto-increment列赋值的情况下添加一行新记录,MySQL会自动添加一个id=11的新行。
有时,我们需要删除这些行并重置auto-increment列,以便在进行下一次插入时,第一条记录的标识将具有主键值1。
MySQL允许多种方式来重置auto-increment列的值,这些方式包括:
- 使用ALTER TABLE语句
- 使用TRUNCATE TABLE语句
- 使用一对DROP TABLE和CREATE TABLE语句
首先,我们将创建一个名为” Animals “的表,并将 id列 赋予auto-increment属性。请参见下面的语句:
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会从6开始生成行id。执行以下查询:
mysql> INSERT INTO Animals (name)
VALUES ('Rabbit');
最后,查询表中的数据以查看效果。下面的输出更清楚地解释了,我们有六行数据,而不是七行,最后一个自增值为6。
使用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);