插入更新 MERGE INTO 和 conflict 和 ON DUPLICATE KEY UPDATE REPLACE INTO

说明

一、PostgreSQL案例

在PostgreSQL下使用 conflict。

1、插入更新-案例

(1)表结构

​​在这里插入图片描述

(2)设置唯一键

需要先设置唯一键。(也可以设置多个字段的唯一键)

alter table stu add constraint name_cons unique(name);

如果 没有设置唯一键,错误信息如下:

insert into stu values('王二',35) on conflict(name) do update set age= 35
> ERROR:  there is no unique or exclusion constraint matching the ON CONFLICT specification

> 时间: 0.009s

(3)执行sql

insert into stu values('王二',35) on conflict(name) do update set age=35;

(4)其他案例参考:

insert into tbl (sid, v1, crt_time) values (:sid, :v1, now())     
on conflict (sid) do update set     
  v1=excluded.v1,     
  crt_time=excluded.crt_time,     
  cnt=tbl.cnt+1,     
  sum_v=case tbl.cnt when 1 then tbl.v1+excluded.v1 else tbl.sum_v+excluded.v1 end,     
  min_v=least(tbl.min_v, excluded.v1),     
  max_v=greatest(tbl.max_v, excluded.v1)      
;     

2、批量更新-案例

注意: set 后的字段不用加表名,否者会报错。

update
    exam.sc_examstu
set
    examstuname = tmp.examstuname,
    examstunum = tmp.examstunum
from
    (values
    <foreach collection="dataList" item="item" separator=",">
    (
        #{item.idcard},
        #{item.fk_examtime},
        #{item.examstuname},
        #{item.examstunum}
    )
    </foreach>
    ) as tmp (idcard,fk_examtime,examstuname
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值