【PostgreSQL】PostgreSQL的upsert功能(insert on conflict do)的用法

PostgreSQL 的 upsert介绍及语法

PostgreSQL 的 upsert 功能:当记录不存在时,执行插入;否则,进行更新。

注意: ON CONFLICT只在 PostgreSQL 9.5 以上可用。

INSERT INTO table_name(column_list) VALUES(value_list)
ON CONFLICT target action;

target 可以是:

  • (column_name):一个字段名
  • ON CONSTRAINT constraint_name:其中的 constraint_name 可以是一个唯一约束的名字
  • WHERE predicate:带谓语的 WHERE 子句

action 可以是:

  • DO NOTHING:当记录存在时,什么都不做
  • DO UPDATE SET column_1 = value_1, … WHERE condition:当记录存在 时,更新表中的一些字段

实际操作

建表导入模拟数据

drop table if exists "test"."goods";
create table "test"."goods" (
  "store_cd" int4 not null,
  "good_cd" varchar(50) not null,
  "name" varchar(255)
);
 
alter table "test"."goods" add constraint "pr_cd_key" primary key ("store_cd", "good_cd");
insert into "test"."goods" values (101, '1', '张三');
insert into "test"."goods" values (102, '2', '李四');
insert into "test"."goods" values (103, '3', '王五');
 
select * from "test"."goods";

数据存在则更新数据,不存在则插入数据

通过指定约束名称进行upsert

insert into test.goods values ( 104, '4', '赵六' ) 
on conflict on constraint pr_cd_key do
update 
	set name = '更新' 
where
	goods.store_cd = '104' 
	and goods.good_cd = '4'
;

通过指定唯一键字段进行upsert

insert into test.goods values ( 104, '4', '赵六' ) 
on conflict ( store_cd, good_cd ) do
update 
	set name = '更新' 
where
	goods.store_cd = '104' 
	and goods.good_cd = '4'
;

数据存在即不做任何操作,数据不存在则插入

insert into test.goods values ( 104, '4', '赵六' ) 
on conflict on constraint pr_cd_key do nothing
;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值