很多 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;
与预期结果一致。
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
查看执行结果
与预期结果一致。
文章
阅读量
获赞