【发布时间】:2012-01-24 16:26:06
【问题描述】:
我很熟悉 InnoDB 中插入失败会导致自动递增主键出现间隙的事实,我相信这是不相关的(这对我来说并不明显)。我遇到的问题是,我会将 5 条记录插入到具有自动递增主键的表中,这会导致主键的间隙从 5 到 8。这是一个重复该问题的脚本。
DROP TABLE IF EXISTS `test_table`;
CREATE TABLE `test_table` (
`A` int(10) unsigned NOT NULL AUTO_INCREMENT,
`B` int(10) unsigned NOT NULL,
PRIMARY KEY (`A`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
insert into `test_table` (`B`)
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5;
insert into `test_table` (`B`)
SELECT 6
UNION
SELECT 7
UNION
SELECT 8
UNION
SELECT 9
UNION
SELECT 10;
SELECT * FROM `test_table`;
在这种情况下,我希望 A 列和 B 列相同,但在第二次插入的开头,A 为 8,B 为 6。有人知道为什么会出现这种差距吗?
我查看了此处的文档:http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html,但这些锁定模式似乎与这个差距无关(我可能遗漏了一些东西)。
【问题讨论】: