【问题标题】:On Duplicate Key Update won't update, but throws an error for duplicatesOn Duplicate Key Update 不会更新,但会引发重复错误
【发布时间】:2014-08-19 23:57:05
【问题描述】:

我有一个包含两列主键 (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) 行?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您不能在查询中多次引用同一个占位符。 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)
    

    不过,我不确定为什么会导致创建重复条目时出错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多