1

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

这个问题非常烦人。

有什么简单的方法吗?

4

2 回答 2

0

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

参考这篇文章:

使用 INSERT IGNORE 避免 InnoDB 上的自动增量漏洞

于 2012-03-08T01:13:12.520 回答
0

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

在 INSERT IGNORE 上,InnoDB 只能通过尝试插入来判断是否已经存在记录。它需要在插入之前自动递增。您无法搜索然后插入,因为其他进程可能正在执行相同的操作并在选择和插入之间的时间内插入相同的记录。

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

于 2012-03-08T01:29:36.337 回答