如果您使用的是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';
以下是使用insert命令在表中插入记录的查询:
mysql> insert into DemoTable values(); mysql> insert into DemoTable values(); mysql> insert into DemoTable values(); mysql> insert into DemoTable values(); mysql> insert into DemoTable values(); mysql> insert into DemoTable values();
以下是使用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;
让我们再次显示所有记录。以下是查询:
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; Records: 3 Duplicates: 0 Warnings: 0
现在再次插入一些记录,然后显示表中的所有记录以检查auto_increment值从4开始:
mysql> insert into DemoTable values(); mysql> insert into DemoTable values(); mysql> insert into DemoTable values();
以下是显示表中所有记录的查询:
mysql> select *from DemoTable;
这将产生以下输出。新的ID从4开始:
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | +----+ 6 rows in set (0.00 sec)