MySQL 重置自增
自动递增是MySQL提供的有用功能。它总是为表中的每个新插入的行
生成唯一的身份。通常,我们对表中的主键字段使用自动递增属性。每次我们将新记录插入到表中时,MySQL都会自动将值增加到auto-increment列。
例如,我们有一个已经包含十行的表。接下来,如果我们添加新行而不将值赋给自动增量列,则MySQL会自动添加具有
id = 11 的新行。
有时,我们需要删除这些行并重置auto-increment列,以便当我们在表中进行下一次插入时,第一条记录的标识将具有主键值1。
MySQL提供了多种方法来重置auto-增加列值。这些方法是:
使用ALTER TABLE语句
使用TRUNCATE TABLE语句
使用一对DROP TABLE和CREATE TABLE语句
首先,我们将创建一个名为"
动物"的表,并为
id列分配自动递增属性。请参阅以下语句:
mysql> CREATE TABLE Animals(
id int NOT null AUTO_INCREMENT,
name CHAR(30) NOT null,
PRIMARY KEY (id));
接下来,我们将一些示例数据插入"动物"表中,如下所示:
mysql> INSERT INTO Animals (name) VALUES
('Tiger'),('Dog'),('Penguin'),
('Camel'),('Cat'),('Ostrich');
现在,我们将执行以下语句来验证插入操作:
mysql> SELECT * FROM Animals;
我们应该得到以下输出。在insert语句中,我们没有为auto-increment列指定任何值。但是我们可以在输出中看到MySQL会自动为该字段按顺序生成一个唯一的数字。
让我们以此表为例来详细演示重置Auto-increment列值的方法。
使用ALTER TABLE语句
ALTER TABLE语句用于更改表或任何表字段的名称。它还用于添加,删除或重置表中的现有列。 MySQL还允许该语句在需要时重置自动递增列的值。
语法
以下是ALTER TABLE语句的语法: 重置自动增量列值:
ALTER TABLE table_name AUTO_INCREMENT = value;
在这种语法中,我们首先在ALTER TABLE子句之后指定了
表名。接下来,我们在表达式中将要重置的值指定为
AUTO_INCREMENT = value 。
请注意,MySQL不允许重置小于或小于的值。等于已使用的值。
例如,如果我们使用的是InnoDB,则该值不应小于或等于自动增量列的当前最大值。
对于
MyISAM >,如果指定的值小于或等于auto_increment列的最大值,则该值将重置为当前的最大值加1。
对于
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而不是7。
使用TRUNCATE TABLE语句
MySQL中的TRUNCATE TABLE语句在不删除表结构的情况下完全删除了表的数据,并始终重置自动递增列的值为零。
语法
以下语法说明了TRUNCATE TABLE语句,用于重置自动递增列的值:
请注意,执行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);