重复密钥更新不会更新,但会为重复项引发错误

时间:2014-06-29 12:38:14

标签: mysql

我有一个包含两列主键(key1,key2)的表。

这是我的查询

INSERT INTO mytable (key1, key2, val1, val2) 
VALUES (:k1, :k2, :v1, :v2)
ON DUPLICATE KEY UPDATE val1 = val1 + :v1, val2 = val2 + :v2

现在当我插入一个带有重复键的行时,我收到以下错误消息:

  

带有消息'SQLSTATE [23000]的未捕获异常'PDOException':   完整性约束违规:1062密钥的重复条目“157-433”   ......中的“主要”......

为什么不只更新现有的(157,433)-row?

1 个答案:

答案 0 :(得分:8)

您无法在查询中多次引用同一占位符。 MySQL有一个内置的解决方案 - 如果你在VALUES(colname)子句中使用ON DUPLICATE KEY,它指的是如果它不是一个存储在列中的值重复。所以使用:

INSERT INTO mytable (key1, key2, val1, val2)
VALUES (:k1, :k2, :v1, :v2)
ON DUPLICATE KEY UPDATE val1 = val1 + VALUES(val1), val2 = val2 + VALUES(val2)

我不确定为什么它会导致有关创建重复条目的错误。