条件更新 MariaDB (MySQL)
Posted
技术标签:
【中文标题】条件更新 MariaDB (MySQL)【英文标题】:Conditional UPDATE 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';
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于条件更新 MariaDB (MySQL)的主要内容,如果未能解决你的问题,请参考以下文章