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

时间:2017-11-08 17:35:35

标签: php mysql innodb

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

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

除了并非我的所有架构都以相同的方式构建以外,我的其中一个表,它重写了所有具有相同外键的记录,因为它不是唯一的(但我没有这个问题)在重复键上插入。)

所以我想知道有一个很好的方法可以将重复键上的插入更新重新创建为单独的查询,这样就可以避免不必要的自动增量。

1 个答案:

答案 0 :(得分:0)

IODKU需要UNIQUE密钥,通常 AUTO_INCREMENT

IODKU,如果尚未进入交易,可以使用

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