IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> postgresql无则插入,有则更新 -> 正文阅读

[大数据]postgresql无则插入,有则更新

准备工作

我们只需要准备一张表😉
在这里插入图片描述

upsert是一个组合词,即当往表中插入记录,如果该记录已存在则更新,否则插入新记录。

postgresql 9.5版本之前实现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语法简解)

那么是如何做到呢?

首先执行update语句,如果找到满足条件的数据就更新,并把该数据存放到upsert中,在执行insert时就不满足条件了;
如果找不到满足条件的数据,upsert中就是空的,在执行insert语句时就满足条件了。二者是互斥的👍。

postgresql 9.5版本之后实现upsert功能

语法

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等。

你学废了吗?😏

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:37:17  更:2022-07-21 21:39:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 23:27:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码