注册
Mysql 的 ON DUPLICATE KEY UPDATE 用法在达梦数据库中如何实现
专栏/龙山溪笔谈/ 文章详情 /

Mysql 的 ON DUPLICATE KEY UPDATE 用法在达梦数据库中如何实现

myth8860 2020/12/11 4813 5 4
摘要 本文介绍了达梦数据库中通过一个语句实现对单条数据执行或对多条语句批量执行“主键不存在就插入,主键存在就更新”的操作。

很多 MySQL 转达梦的朋友会碰到这个问题:MySQL 插入数据的时候支持 ON DUPLICATE KEY UPDATE ,对于主键重复的数据可以执行更新而不是报错,目前达梦数据库还未支持这个语法,那应该怎么在达梦数据库中实现这个操作呢?

下面给大家介绍一下解决方法:在 DM 和 ORACLE 中都可以改写为MERGE语句

创建测试表,并插入数据

DROP TABLE IF EXISTS mRowUpdate; CREATE TABLE mRowUpdate ( id INT NOT NULL, cnt VARCHAR(255) NULL, PRIMARY KEY (id) ); INSERT INTO mRowUpdate VALUES (1, 'sss'); INSERT INTO mRowUpdate VALUES (2, 'szh'); INSERT INTO mRowUpdate VALUES (3, '9999'); COMMIT;

单条数据

MySQL 中 INSERT 一条记录,如果主键已存在就 UPDATE。

INSERT INTO mRowUpdate(id,cnt) VALUES(3, 'SuperMan') ON DUPLICATE KEY UPDATE cnt='SuperMan';

达梦数据库中需要用 MERGE 语句来改写

MERGE INTO mRowUpdate AS T1 USING (SELECT 3 id,'SuperMan' cnt FROM DUAL ) AS T2 ON T1.id=T2.id WHEN MATCHED THEN UPDATE SET T1.cnt=T2.cnt WHEN NOT MATCHED THEN INSERT VALUES(3, 'SuperMan'); COMMIT;

查看执行结果

SELECT * FROM mRowUpdate;

插入语句执行1.png

与预期结果一致。

多条数据

MySQL 对多条数据进行插入或更新操作如下:

INSERT INTO mRowUpdate(id,cnt) VALUES ('2','UPDATE') , ('4','INSERT') ON DUPLICATE KEY UPDATE cnt = VALUES(cnt);

达梦数据库中对于多行数据的改写方法如下:

MERGE INTO mRowUpdate T1 USING (SELECT 2 as ID,'UPDATE' as CNT FROM DUAL UNION ALL SELECT '4','INSERT' FROM DUAL) T2 ON (T1.id = T2.id) WHEN NOT MATCHED THEN INSERT(id, CNT) VALUES (T2.id, T2.CNT) WHEN MATCHED THEN UPDATE SET T1.CNT = T2.CNT

查看执行结果

插入语句执行2.png

与预期结果一致。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服