条件更新 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)的主要内容,如果未能解决你的问题,请参考以下文章

centos7 mariaDB

条件更新 MariaDB (MySQL)

Linux安装配置MariaDB数据库全程详解

Maria DB:MySQL 服务器已消失,错误日志中没有任何内容

简述MariaDB和二进制包简单部署

部署maria数据库到linux(源码编译安装)