【达梦数据库】MySQL 的ON DUPLICATE KEY UPDATE语句在达梦数据库中使用的方式

在从MySQL迁移数据库到达梦数据库中,原来的MySQL中的mybatis语句:ON DUPLICATE KEY UPDATE  更新或插入进行改造可以参考一下形式:

 

1、针对一条数据的更新或者插入可以这样执行:

MERGE INTO t_person T1
USING (
  SELECT
  1 id,
  'test' mc,
  1 sex,
  25 age,
  FROM dual
) T2 ON (T1.id = T2.id)
WHEN NOT MATCHED THEN INSERT(id, mc, sex,
age) VALUES
(T2.id, T2.mc, T2.sex, T2.age)
WHEN MATCHED THEN UPDATE
SET T1.mc = T2.mc,T1.sex = T2.sex,T1.age = T2.age

2、针对多条数据进行批量更新或插入操作可以这样执行:

 MERGE INTO t_person T1
  USING (
  <foreach collection="list" item="item" index="index" separator="UNION ALL">
  SELECT
  #{item.id} id,
  #{item.mc} mc,
  #{item.sex} sex,
  #{item.age} age
  FROM dual
</foreach>
) T2 ON (T1.id = T2.id )
  WHEN NOT MATCHED THEN INSERT(id, mc, sex,
  age) VALUES
  (T2.id, T2.mc, T2.sex, T2.age)
  WHEN MATCHED THEN UPDATE
  SET T1.mc = T2.mc,T1.sex = T2.sex,T1.age = T2.age

对于达梦数据库的更新merge into语句,可以替换MySQL的ON DUPLICATE KEY UPDATE,方便数据迁移。

 

### PostgreSQL 中实现类似 MySQL 的 `ON DUPLICATE KEY UPDATE` 功能 在 PostgreSQL 中,可以通过使用 `INSERT ... ON CONFLICT` 语句来实现类似于 MySQL 的 `ON DUPLICATE KEY UPDATE` 功能。此功能允许在遇到唯一约束冲突时执行特定操作。 #### 单行插入并处理冲突 对于单行数据的插入和更新,可以采用如下形式: ```sql INSERT INTO test (id, name) VALUES ('1', 'Alice') ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name; ``` 这里的关键在于 `ON CONFLICT (id)` 部分指定了当发生 ID 字段上的冲突时应采取的动作;而 `DO UPDATE SET name = EXCLUDED.name;` 表明一旦检测到重复键,则会用新传入的名字替换现有记录中的名字[^1]。 #### 多行插入并处理冲突 针对多条记录的同时插入以及可能存在的多个冲突情况,同样适用上述方法,并且能够一次性解决所有潜在冲突: ```sql INSERT INTO test (id, name) VALUES ('2', 'Bob'), ('3', 'Charlie'), ('4', 'David') ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name; ``` 这段代码不仅尝试向表中添加新的行,而且会在发现任何已存在相同 ID 值的情况下自动触发相应的更新逻辑[^5]。 值得注意的是,在定义冲突条件时可以选择不同的列作为依据,比如上面的例子是以 `id` 列为准,也可以根据实际情况调整为其他唯一索引或主键字段组合。 另外,除了简单的赋值外,还可以利用更复杂的表达式来进行更新操作,例如基于某些计算结果或其他列的内容决定最终存入的数据[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值