目录准备工作postgresql 9.5版本之前实现upsert功能postgresql 9.5版本之后实现upsert功能总结准备工作 我们只需要准备一张表 upsert是一个组合词,即当往表中插入记录,如果该记录已
我们只需要准备一张表
upsert是一个组合词,即当往表中插入记录,如果该记录已存在则更新,否则插入新记录。
语法
postgresql 9.5版本之前想实现upsert功能可以使用with语法来实现。
实例
SQL如下
WITH UPSERT
AS ( UPDATE org SET org_name = '复仇者联盟2', modify_time = now() WHERE org_id = 2 RETURNING *)
INSERT
INTO org (org_id, org_no, org_name)
SELECT 2,
'002',
'复仇者联盟'
WHERE NOT EXISTS(SELECT 1 FROM upsert WHERE org_id = 2);
第一次执行SQL,表中没有org_id为2的数据,则插入一条新数据。
执行成功了,刷新一下表,可以看到插入了一条新数据。
再次执行SQL,这时表中已经有一条为org_id为2的数据了,那么则更新数据。
刷新表,可以看到更新了org_name和modify_time字段。
嘚吧嘚(SQL语法简解)
那么是如何做到呢?
语法
postgresql 9.5版本就可以使用INSERT ON CONFLICT语句了,语法如下:
insert into table_name(column_list)
values(value_list)
on conflict target action;
实例
SQL如下:
insert into org(org_id, org_no, org_name)
values (3, '003', '银河护卫队')
on conflict(org_id) do update set org_name='银河护卫队2',
modify_time=now();
第一次执行SQL,表中没有org_id为3的数据,则插入一条新数据。
执行成功了,刷新一下表,可以看到插入了一条新数据。
第二次执行SQL,这时表中已经有一条为org_id为3的数据了,那么则更新数据。
可以看到更新了org_name和modify_time字段。
嘚吧嘚(SQL语法简解)
其实大体思路和之前还是一样,就是9.5版本有了INSERT ON CONFLICT语句之后,使得书写SQL更加简单了,那就简单解释一下SQL语法中的两个名词吧。
target
可以理解为目标或者限制条件,一般是某个字段名。action
是要做的具体操作,比如update、delete、do nothing等。以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
--结束END--
本文标题: postgresql无则插入,有则更新问题
本文链接: https://lsjlt.com/news/201291.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0