如何将 INSERT ... ON DUPLICATE KEY UPDATE 写成单独的查询?

How to write INSERT… ON DUPLICATE KEY UPDATE as Separate Queries?

当我在重复键上插入时,我试图避免质量自动增量(这里有一点点,那里很好)。

我把它写成单独的查询。 使用键(可以是主键或外键)检查记录是否存在。 如果存在,更新。 如果没有,插入。

除了我的所有模式都以相同的方式构建之外,哪些类型有效,所以对于我的一个表,它重写了所有具有相同外键的记录,因为它不是唯一的(但我没有这个问题当我插入重复键时)。

所以我想知道是否有一种好方法可以将重复键上的插入更新重新创建为单独的查询,从而避免不必要的自动递增。

IODKU 需要 UNIQUE 密钥,通常 而不是 AUTO_INCREMENT

IODKU,如果还没有在交易中,可以用

模拟
START TRANSACTION;
SELECT ... FOR UPDATE;   -- note
if row exists
    UPDATE ...;
else
    INSERT ...;
COMMIT;