mysql查询批量插入导致序列间隙

时间:2013-08-08 16:11:43

标签: mysql insert sequence auto-increment bulk

我对表中的selectinsert行进行了查询,并将自动增量col作为键。

insert into table a select * from table B

我发现在执行查询后,table B

中的自动增量列中存在序列间隔

有可能吗? 或者我的select语句无法插入一些记录??

请帮忙。

我无法重复这种情况,因为这是一个生产服务器,在执行查询之前我没有备份。

非常感谢。

1 个答案:

答案 0 :(得分:2)

如果您将InnoDBINSERT IGNORE一起使用,则可能需要阅读本文讨论此问题:

Avoiding auto-increment holes on InnoDB with INSERT IGNORE

为什么我们有差距?

  

InnoDB检查一个auto_increment计数器   表,如果需要一个新值,则递增计数器和   将新值分配给列。在MySQL 5.1.22之前使用了InnoDB   访问称为“传统”的计数器值的方法。这个   使用一个名为AUTO-INC的特殊表锁,直到结束   查询或事务。因此,两个查询不能有   AUTO-INC同时锁定,因此我们失去了并发性   性能。长时间运行的查询问题更严重   比如INSERT INTO table1 ... SELECT ... FROM table2。

使用select中的简单插入时,有一个known bug about this

总之,我不会说这是您的查询的问题,但更多与引擎处理来自选择块的插入的方式有关。