如何在MySQL中将表的自增值设置为较低的值?


如果您使用的是InnoDB引擎,则无法将表的auto_increment值设置为较低的值。您需要将引擎从InnoDB更改为MyISAM。

注意:MyISAM引擎允许您设置较低的值。这里我们使用的是相同的引擎。

根据官方文档

You cannot reset the counter to a value less than or equal to any that have
already been used. For MyISAM, if the value is less than or equal to the
maximum value currently in the AUTO_INCREMENT column, the value is reset
to the current maximum plus one. For InnoDB, if the value is less than the
current maximum value in the column, no error occurs and the current sequence
value is not changed.

如上所示,在MyISAM中,假设一些ID被删除了。之后,如果您再次添加auto_increment,则ID将从较低的值开始,即从剩余的最终ID开始(在我们删除一些ID之后)。

让我们首先创建一个使用MyISAM引擎的表。

mysql> create table DemoTable (Id int NOT NULL AUTO_INCREMENT PRIMARY KEY)ENGINE='MyISAM';
Query OK, 0 rows affected (0.23 sec)

以下是使用insert命令向表中插入记录的查询。

mysql> insert into DemoTable values();
Query OK, 1 row affected (0.04 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.03 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.03 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.02 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.05 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.08 sec)

以下是使用select命令从表中显示记录的查询。

mysql> select *from DemoTable;

这将产生以下输出。

+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
+----+
6 rows in set (0.00 sec)

现在,删除ID 4、5和6。

mysql> delete from DemoTable where Id=4 or Id=5 or Id=6;
Query OK, 3 rows affected (0.06 sec)

让我们再次显示所有记录。以下是查询。

mysql> select *from DemoTable;

删除一些ID后,将产生以下输出。

+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
+----+
3 rows in set (0.00 sec)

现在,让我们设置新的auto_increment ID。

以下是将MyISAM引擎中的auto_increment值设置为较低值的查询。但是,当前的auto_increment值现在应该从7开始,但是由于我们使用的是MyISAM引擎,因此该值将重置为当前最大值,即3加1,也就是3+1=4将是新的ID。

以下是查询。

mysql> alter table DemoTable auto_increment=4;
Query OK, 3 rows affected (0.38 sec)
Records: 3 Duplicates: 0 Warnings: 0

现在再次插入一些记录,然后显示表中的所有记录以检查auto_increment值是否从4开始。

mysql> insert into DemoTable values();
Query OK, 1 row affected (0.03 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.02 sec)

以下是显示表中所有记录的查询。

mysql> select *from DemoTable;

这将产生以下输出。新的ID从4开始。

+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
+----+
6 rows in set (0.00 sec)

更新于:2019年7月30日

730 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告