【发布时间】:2011-06-18 12:27:51
【问题描述】:
有以下两个表:
create table lol(id int auto_increment, data int, primary key id(id));
create table lol2(id int auto_increment, data int, primary key id(id));
插入一些值:
insert into lol2 (data) values (1),(2),(3),(4);
现在使用 select 插入:
insert into lol (data) select data from lol2;
再做一次:
insert into lol (data) select data from lol2;
现在看表:
select * from lol;
我收到:
+----+------+
| id | data |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 8 | 1 |
| 9 | 2 |
| 10 | 3 |
| 11 | 4 |
+----+------+
我对 4 和 8 之间的差距感到困惑...是什么原因造成的,我该怎么做才能没有差距?非常感谢!
【问题讨论】:
-
innodb_autoinc_lock_mode的值是多少? -
尝试删除表并再次运行查询,它不应该这样做。当我尝试时,我有 1 到 8 个 ID。一个查询可能会失败一次并增加 ID。自动增量不是取最大数加 1,它存储在元表中。因此,如果有任何失败,自动增量将增加,但您将没有记录 - 您最终会出现差距。
-
鉴于丢失了 4 个密钥,这似乎是事务回滚,并且自动编号没有被重用。
-
对不起,我如何获得 innodb_autoinc_lock_mode 的值?
-
我明白了。 bugs.mysql.com/bug.php?id=61058这是一个已报告的错误。
标签: mysql insert auto-increment