作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个包含两列主键的表 (key1,key2)
。
这是我的查询
INSERT INTO mytable (key1, key2, val1, val2)
VALUES (:k1, :k2, :v1, :v2)
ON DUPLICATE KEY UPDATE val1 = val1 + :v1, val2 = val2 + :v2
现在,当我插入带有重复键的行时,我收到此错误消息:
Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '157-433' for key "PRIMARY" in ...
为什么它不只更新现有的 (157,433) 行?
最佳答案
您不能在一个查询中多次引用同一个占位符。 MySQL 对此有一个内置的解决方案——如果您在 ON DUPLICATE KEY
子句中使用 VALUES(colname)
,它指的是本应存储在如果它不是重复的列。所以使用:
INSERT INTO mytable (key1, key2, val1, val2)
VALUES (:k1, :k2, :v1, :v2)
ON DUPLICATE KEY UPDATE val1 = val1 + VALUES(val1), val2 = val2 + VALUES(val2)
不过,我不确定为什么它会导致有关创建重复条目的错误。
关于mysql - On Duplicate Key Update 不会更新,但会抛出重复项错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24476121/
我是一名优秀的程序员,十分优秀!