【问题标题】:Conditional UPDATE MariaDB (MySQL)条件更新 MariaDB (MySQL)
【发布时间】:2020-06-27 21:17:20
【问题描述】:

代码:

UPDATE COMPANY SET id='21' 
WHERE id='20';

错误:

SQLException:键“PRIMARY”的重复条目“21”

我想在这种情况下将主键字段更新为另一个值,但如果该值已经存在,则会引发上述错误。如果 COMPANY 表中不存在“id”,我将如何进行条件更新,以避免使用 MariaDB 语法引发该错误。

注意: 我不是在谈论做一个使用“ON DUPLICATE KEY UPDATE”的条件插入,如下所示。

INSERT INTO COMPANY(id,first,last,age)
VALUES('1','Tim','Jones','70')
ON DUPLICATE KEY UPDATE id='1';

【问题讨论】:

    标签: mysql sql jdbc mariadb


    【解决方案1】:

    您可以统计表格中已有值的数量:

    UPDATE COMPANY C CROSS JOIN
           (SELECT COUNT(*) as cnt
            FROM COMPANY
            WHERE id = 21
           ) CC
        SET c.id = 21
        WHERE id = 20 AND cnt = 0;
    

    注意:在大多数数据库中,您会在 WHERE 子句中使用 NOT EXISTS,但 MySQL/MariaDB 不支持对正在更新的表的引用。

    【讨论】:

      【解决方案2】:

      你可以使用UPDATE IGNORE:

      UPDATE IGNORE COMPANY 
      SET id='21' 
      WHERE id = '20'
      

      查看简化的demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-26
        • 2015-05-17
        • 1970-01-01
        • 2013-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        相关资源
        最近更新 更多