我有一个包含两列主键(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?
答案 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)
我不确定为什么它会导致有关创建重复条目的错误。