MySQL 如何自动递增表的值到较小的值
如果您使用InnoDB引擎,则不能将表的自动递增值设置为较小的值。您需要将引擎从InnoDB更改为MyISAM。
注意: 引擎MyISAM允许您设置较小的值。在这里,我们使用相同的值。
根据官方文档:
您不能将计数器重置为小于或等于已使用的任何计数器的值。对于MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则该值将重置为当前最大值加一。对于InnoDB,如果该值小于列中当前最大值,则不会发生错误,并且当前的序列值不会更改。
如上所示,在MyISAM中,假设删除了一些Id。在此之后,如果您再次添加auto_increment,则Ids将从较小的值开始,即从剩余的最终Ids开始(在我们删除一些Ids之后)。
让我们首先创建一个具有MyISAM引擎的表:
mysql> create table DemoTable (Id int NOT NULL AUTO_INCREMENT PRIMARY KEY)ENGINE='MyISAM';
Query OK, 0 rows affected (0.23 sec)
以下是使用插入命令将记录插入表中的查询:
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)
现在,删除Ids 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;
这将在删除一些Ids后产生以下输出:
+----+
| Id |
+----+
| 1 |
| 2 |
| 3 |
+----+
3 rows in set (0.00 sec)
现在,让我们设置新的auto_increment ids。
以下是将MyISAM引擎中的auto_increment值设置为较小的查询。然而,当前的auto_increment值现在应该从7开始,但由于我们使用的是MyISAM引擎,因此该值将重置为当前最大值,即3加一,即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;
这将产生以下输出。新的ids从4开始:
+----+
| Id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+----+
6 rows in set (0.00 sec)
阅读更多:MySQL 教程