当自动增量与MySQL中的现有数据发生冲突时会发生什么?

ctf*_*ord 12 mysql

我有一个带有autoincremented id列的MySQL表.id从1开始,现在是4000s.

但是,我还需要从旧版本的应用程序将一些遗留数据移植到此表中.此数据的ID从5000开始,必须保留用于审计目的.

如果我在自动增量计数器达到4999后插入一个条目会怎么样?自动增量是否足够智能以查找下一个可用的ID,或者它会因为尝试插入已存在的id 5000而崩溃?

虽然关于如何解决这个问题的建议非常有帮助,但我也想了解MySQL在这种情况下会做什么,以及我是否需要进行干预.

And*_*ffy 9

Autoincrement将使用InnoDB和MyISAM表的下一个可用ID,但您可以通过以下方式手动更改其下一个位置:

插入后,您可以将自动增量设置为高于当前最高ID的值:

ALTER TABLE tbl AUTO_INCREMENT = 9000;
Run Code Online (Sandbox Code Playgroud)


ctf*_*ord 6

Autoincrement将使用InnoDB和MyISAM表的下一个可用ID.

我已经测试了在Windows Vista上运行的MySQL 4.1.22.我创建了两个简单的表,一个使用InnoDB,一个使用MyISAM.每个都有一个名为'id'的自动增量主键和一个名为'description'的varchar列.

我运行了以下命令(没有错误):

INSERT INTO MyIsamTest (description)     VALUES ('autoincrement id insert'); 
INSERT INTO MyIsamTest (id, description) VALUES (100, 'manual id insert');
INSERT INTO MyIsamTest (description)     VALUES ('autoincrement id insert');

SELECT * FROM MyIsamTest;
Run Code Online (Sandbox Code Playgroud)

我得到了以下结果,表明'id'列已正确自动增量:

+=====+=========================+
| id  | description             |
+=====+=========================+
|   1 | autoincrement id insert |
+-----+-------------------------+
| 100 | manual id insert        |
+-----+-------------------------+
| 101 | autoincrement id insert |
+-----+-------------------------+
Run Code Online (Sandbox Code Playgroud)

我在InnoDbTest表上重复了实验,结果相同.