MySQL INSERT .. UPDATE打破AUTO_INCREMENT?

时间:2011-06-18 12:27:52

标签: mysql insert auto-increment

有以下两个表格:

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之间的差距感到困惑......是什么造成了这种情况,我怎么能这样做,以便没有差距?非常感谢!

1 个答案:

答案 0 :(得分:0)

auto_increment不保证ID列中的增量为1。它不能,因为只要你处理并行事务,它就会破坏:

BEGIN                                  BEGIN
  INSERT INTO lol VALUES(...)            INSERT INTO lol VALUES(..)   
  ...                                    ...
COMMIT                                 ROLLBACK

数据库应分配哪些ID?它无法事先知道哪个事务会成功,哪些事务将被回滚。

如果您需要对记录进行连续编号,则可以使用返回该记录的查询; e.g。

SELECT COUNT(*) as position, lol.data FROM lol 
INNER JOIN lol2 ON lol.id < lol2.id 
GROUP BY lol.id