InnoDB在IGNORE上自动增量?

时间:2012-03-08 00:55:24

标签: mysql innodb auto-increment on-duplicate-key

使用InnoDB,无论何时执行INSERT IGNORE或ON DUPLICATE KEY UPDATE,它都会自动增加表,无论是否插入任何内容。

这个问题很可悲。

有什么简单的方法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用特殊的互斥表来模仿INSERT IGNORE行为。

参考这篇文章:

Avoiding auto-increment holes on InnoDB with INSERT IGNORE

答案 1 :(得分:0)

InnoDB允许您回滚交易。这意味着您可以插入到一个表中,无法将相关记录插入另一个表,然后回滚第一个插入。在此期间,其他插入可能发生在第一个表中,它也需要一个唯一的ID。在这种情况下,你不能放弃分发的自动增量。

在INSERT IGNORE上,InnoDB只能通过尝试插入来判断是否已有记录。插入前需要自动增量。你不能搜索然后插入,因为其他进程可能正在做同样的事情,并在select和insert之间插入相同的记录。

除非您认为超过该字段的最大值,否则您应该担心它。对于bigint来说,这非常大。 Facebook使用bigint并且还没有用完。