当前位置: 首页 > news >正文

GaussDB数据库中的MERGE INTO介绍

一、前言

二、GaussDB MERGE INTO 语句的原理概述

1、MERGE INTO 语句原理

2、MERGE INTO 的语法

3、语法解释

三、GaussDB MERGE INTO 语句的应用场景

四、GaussDB MERGE INTO 语句的示例

1、示例场景举例

2、示例实现过程

1)创建两个实验表,并初始化测试数据

2)更新 target_table 中的销售数据,并插入新的销售记录。

3)查看并比对执行结果

五、小结

一、前言

随着数据量的爆炸性增长,数据库管理系统(DBMS)的功能和性能要求也在不断提升。GaussDB 作为一款先进的关系型数据库管理系统,其 MERGE INTO 语句在数据整合、更新操作中发挥了重要作用。MERGE INTO 语句允许用户在单次操作中执行插入和更新操作,大大提高了数据处理效率。本文将举例为大家讲述 GaussDB 中 MERGE INTO 语句的使用。

二、GaussDB MERGE INTO 语句的原理概述

1、MERGE INTO 语句原理

GaussDB 的 MERGE INTO 语句是基于 SQL 标准的,通过单个SQL语句实现了数据的UPDATE和INSERT操作。该语句在执行时,会根据指定的条件比较源表和目标表的数据。当源表和目标表中数据针对关联条件可以匹配上时,则进行UPDATE操作;当源表和目标表中数据针对关联条件无法匹配时,则进行INSERT操作。这种操作方式减少了数据传输的开销,避免多次执行,提高了数据处理的效率。

2、MERGE INTO 的语法

MERGE [/*+ plan_hint */] INTO table_name [ partition_clause ] [ [ AS ] alias ]
USING { { table_name | view_name } | subquery } [ [ AS ] alias ]
ON ( condition )
[WHEN MATCHED THENUPDATE SET { column_name = { expression | subquery | DEFAULT } |( column_name [, ...] ) = ( { expression | subquery | DEFAULT } [, ...] ) } [, ...][ WHERE condition ]
]
[WHEN NOT MATCHED THENINSERT { DEFAULT VALUES |[ ( column_name [, ...] ) ] VALUES ( { expression | subquery | DEFAULT } [, ...] ) [, ...] [ WHERE condition ] }
];where partition_clause can be:
PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } |
SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] ) }
NOTICE: 'partition_clause' is only avaliable in CENTRALIZED mode!
NOTICE: 'subquery' in the UPDATE and INSERT clauses are only avaliable in CENTRALIZED mode!

3、语法解释

  • 权限:进行MERGE INTO操作的用户需要同时拥有目标表的UPDATE和INSERT权限,以及源表的SELECT权限。
  • plan_hint子句:可选,以/*+ */的形式在MERGE关键字后,用于对MERGE对应的语句块生成的计划进行hint调优
  • INTO talbe_name指定正在更新或插入的目标表。
  • USING子句:指定源表,源表可以为表、视图或子查询。
  • ON子句:关联条件,用于指定目标表和源表的关联条件。不支持更新关联条件中的字段。
  • WHEN MATCHED / WHEN NOT MATCHED子句:不支持INSERT子句中包含多个VALUES。WHEN MATCHED和WHEN NOT MATCHED子句顺序可以交换,可以缺省其中一个,但不能同时缺省,不支持同时指定两个WHEN MATCHED或WHEN NOT MATCHED子句。
  • DEFAULT用对应字段的缺省值填充该字段。如果没有缺省值,则为NULL。
  • WHERE conditionUPDATE子句和INSERT子句的条件,只有在条件满足时才进行更新操作,可缺省。不支持WHERE条件中引用系统列。

三、GaussDB MERGE INTO 语句的应用场景

MERGE INTO 语句在多种场景中都有广泛的应用。例如,在数据迁移过程中,可以使用 MERGE INTO 语句将源数据库中的数据迁移到目标数据库,同时保证数据的完整性和一致性。此外,在数据整合ETL过程实时数据处理等场景中,MERGE INTO 语句都能发挥其高效的数据处理能力。

四、GaussDB MERGE INTO 语句的示例

1、示例场景举例

假设我们有两个表:source_table 和 target_table。source_table 包含最新的销售数据,而 target_table 存储历史销售数据。我们的目标是更新 target_table 中的销售数据,并插入新的销售记录。

2、示例实现过程

以下是使用 GaussDB MERGE INTO 语句的实现示例

1)创建两个实验表,并初始化测试数据

--创建测试表target_table,存储历史销售数据
CREATE TABLE public.target_table
(product_id VARCHAR(20),product_name VARCHAR(20),sales_sum_number INT,sales_sum_amount MONEY,create_date VARCHAR(8),update_date VARCHAR(8)
);--插入测试数据
INSERT INTO public.target_table(product_id,product_name,sales_sum_number,sales_sum_amount,create_date,update_date) VALUES('P1001','books',100,1000,'20240101','30001231');
INSERT INTO public.target_table(product_id,product_name,sales_sum_number,sales_sum_amount,create_date,update_date) VALUES('P1002','pens',200,400,'20240102','30001231');--创建测试表source_table,包含最新的销售数据
CREATE TABLE public.source_table
(product_id VARCHAR(20),product_name VARCHAR(20),sales_sum_number INT,sales_sum_amount MONEY,create_date VARCHAR(8)
);--插入测试数据
INSERT INTO public.source_table(product_id,product_name,sales_sum_number,sales_sum_amount,create_date) VALUES('P1001','books',50,500,'20240103');
INSERT INTO public.source_table(product_id,product_name,sales_sum_number,sales_sum_amount,create_date) VALUES('P1003','toys',100,1000,'20240103');--查看结果
SELECT * FROM public.target_table;
SELECT * FROM public.source_table;

2)更新 target_table 中的销售数据,并插入新的销售记录。

--更新 target_table 中的销售数据,并插入新的销售记录。
MERGE INTO target_table AS t  
USING source_table AS s  
ON (t.product_id = s.product_id)  
WHEN MATCHED THEN  UPDATE SET t.sales_sum_number=t.sales_sum_number + s.sales_sum_number,t.sales_sum_amount = t.sales_sum_amount + s.sales_sum_amount,t.update_date = s.create_date
WHEN NOT MATCHED THEN  
INSERT (product_id,product_name,sales_sum_number,sales_sum_amount,create_date,update_date) VALUES (s.product_id,s.product_name,s.sales_sum_number,s.sales_sum_amount,s.create_date,'30001231');--查看执行结果
SELECT * FROM public.target_table;

3)查看并比对执行结果

更新之前的目标表target_table

源表source_table:

更新之后的目标表target_table

上述示例中,我们通过 MERGE INTO 语句将 source_table 中的销售数据与 target_table 中的数据进行匹配。在目标中,产品“P1001”销售数量增加了50,销售金额增加了500,更新日期更新为源表中的创建日期。产品“P1002”的销售数据没有变化。产品“P1003”作为一条新的销售数据插入到了历史表(目标表)中。这样,我们就轻松地将最新的销售数据整合到 target_table 中,同时保持数据的完整性和一致性。

特别说明:在实际业务操作时,需要提前做好规划,确保执行的准确定、数据的准确性以及数据的安全性,同时做好各个环节的备份等操作。

五、小结

MERGE INTO 语句在GaussDB数据库中是一个非常好用、方便的SQL工具。同时,在数据处理工作中起着非常重要的作用,它能够提高数据处理效率,简化数据处理流程,满足各种数据处理需求。本文通过在GaussDB数据库中模拟了一则简单的示例为大家进行了讲解,希望可以帮助读者更好的理解与使用。

——结束

相关文章:

GaussDB数据库中的MERGE INTO介绍

一、前言 二、GaussDB MERGE INTO 语句的原理概述 1、MERGE INTO 语句原理 2、MERGE INTO 的语法 3、语法解释 三、GaussDB MERGE INTO 语句的应用场景 四、GaussDB MERGE INTO 语句的示例 1、示例场景举例 2、示例实现过程 1)创建两个实验表,并…...

2024年上海高考数学最后四个多月的备考攻略,目标140+

亲爱的同学们,寒假已经来临,春节即将到来,距离2024年上海高考已经余额不足5个月了。作为让许多学子头疼,也是拉分大户的数学科目,你准备好了吗?今天,六分成长为您分享上海高考数学最后四个多月的…...

SSL证书自动化管理有什么好处?如何实现SSL证书自动化?

SSL证书是用于加密网站与用户之间传输数据的关键元素,在维护网络安全方面,管理SSL证书与部署SSL证书一样重要。定期更新、监测和更换SSL证书,可以确保网站的安全性和合规性。而自动化管理可以为此节省时间,并避免人为错误和不必要…...

路由器初始化配置、功能配置

实验环境 拓扑图 Ip规划表(各组使用自己的IP规划表) 部门 主机数量 网络地址 子网掩码 网关 可用ip Vlan 市场部 38 192.168.131.0 255.255.255.0 192.168.131.1 2-254 11 研发部 53 192.168.132.0 255.255.255.0 192.168.132.1 2-2…...

node介绍

1.node是什么 Node是一个基于Chrome V8引擎的JS运行环境。 Node不是一个独立的语言、node不是JS框架。 Node是一个除了浏览器之外的、可以让JS运行的环境 Node.js是一个让JS运行在服务端的开发平台,是使用事件驱动,异步非阻塞I/O,单线程&…...

海外抖音TikTok、正在内测 AI 生成歌曲功能,依靠大语言模型 Bloom 进行文本生成歌曲

近日,据外媒The Verge报道,TikTok正在测试一项新功能,利用大语言模型Bloom的AI能力,允许用户上传歌词文本,并使用AI为其添加声音。这一创新旨在为用户提供更多创作音乐的工具和选项。 Bloom 是由AI初创公司Hugging Fac…...

【ARM 嵌入式 编译系列 3.6 -- 删除lib中的某个文件】

请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】 文章目录 删除lib中的某个文件 删除lib中的某个文件 比如,如果要删除 libc.a 静态库中的特定对象文件并重新使用这个静态库,在终端中可以使用 ar 命令。ar 是一个归档工具,它可以创建…...

web架构师编辑器内容-图层拖动排序功能的开发

新的学习方法 用手写简单方法实现一个功能然后用比较成熟的第三方解决方案即能学习原理又能学习第三方库的使用 从两个DEMO开始 Vue Draggable Next: Vue Draggable NextReact Sortable HOC: React Sortable HOC 列表排序的三个阶段 拖动开始(dragstart&#x…...

3.RHCSA脚本配置及通过node2改密码

运行脚本发现node2不成功 脚本破解 选第二个 Ctrl x 换行 破解成功后做node2的改密码题 回到redhat, 发现检测程序检测密码题成功,得了8分....

AtCoder Regular Contest 170(A~B)

A - Yet Another AB Problem 给你两个字符串S和T,你可以对S执行操作,选择两个字符,将前面的改为A,后面的改为B,最少操作几次可以把S改成T。如果改不成就输出-1。 从左往右一个一个改过去,分类讨论&#x…...

rk1126, 实现 yolov8 目标检测

基于 RKNN 1126 实现 yolov8 目标检测 Ⓜ️ RKNN 模型转换 ONNX yolo export model./weights/yolov8s.pt formatonnx导出 RKNN 这里选择输出 concat 输入两个节点 onnx::Concat_425 和 onnx::Concat_426 from rknn.api import RKNNONNX_MODEL ./weights/yolov8s.onnxRKNN_MOD…...

【软件测试】学习笔记-网站可扩展性架构设计

可扩展性,指的是网站的架构设计能够快速适应需求的变化,当需要增加新的功能实现时,对原有架构不需要做修改或者做很少的修改就能够快速实现新的业务需求。 从这个定义中,我们很容易就可以得出衡量网站可扩展性设计优秀与否的主要标…...

深度学习常用代码总结(k-means, NMS)

目录 一、k-means 算法 二、NMS 一、k-means 算法 k-means 是一种无监督聚类算法,常用的聚类算法还有 DBSCAN。k-means 由于其原理简单,可解释强,实现方便,收敛速度快,在数据挖掘、数据分析、异常检测、模式识别、金…...

数据结构·顺序表应用

本节应用是要用顺序表实现一个通讯录,收录联系人的姓名、性别、电话号码、住址、年龄 ​​​​​​​ 顺序表的实现在上一节中已经完成了,本节的任务其实就是应用上节写出来的代码的那些接口函数功能,做出来一个好看的,可…...

第一个 OpenGL 程序:旋转的立方体(VS2022 / MFC)

文章目录 OpenGL API开发环境在 MFC 中使用 OpenGL初始化 OpenGL绘制图形重置视口大小 创建 MFC 对话框项目添加 OpenGL 头文件和库文件初始化 OpenGL画一个正方形OpenGL 坐标系改变默认颜色 重置视口大小绘制立方体使用箭头按键旋转立方体深度测试添加纹理应用纹理换一个纹理 …...

剩余银饰的重量 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 有N块二手市场收集的银饰,每块银饰的重量都是正整数,收集到的银饰会被熔化用于打造新的饰品。 每一回合,从中选出三块 最重的…...

redis远程连接不上解决办法

问题描述: redis远程服务端运行在192.168.3.90计算机上,客户端计算机(ip:192.168.3.110)通过redsi-cli.exe客户端工具连接时,没有反应,连接不上。 如图所示: 解决步骤: 步骤一&…...

利用Anaconda安装pytorch和paddle深度学习环境+pycharm安装后不能调用pytorch和paddlepaddle框架

问题现象: 之前安装后不能在添加pytorch和paddlepaddle框架 原因(疑似): 在终端中显示pytorch和paddle在C盘但是安装是安装在J盘 解决办法: 卸载、删除文件重新安装后可以看到文件位置在J盘中 但是选择时还是显示C…...

Eclipses安装教程

一、下载开发工具包 1、开发工具包JDK 下载地址链接:https://www.oracle.com/cn/java/technologies/downloads/ 下载教程: 1)点击链接,可以跳转到页面 2)下滑页面,找到开发工具包 3) 记住下载之…...

安装python版opencv的一些问题

安装python版opencv的一些问题 OpenCV是知名的开源计算机视觉算法库,提供了C\Python\Java版共享库。 在Python中使用OpenCV格外简单,一句命令就能安装,一行import就能引入,可谓是神器。然而,在实际使用中可能遇到一些…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

JDK 17 序列化是怎么回事

如何序列化&#xff1f;其实很简单&#xff0c;就是根据每个类型&#xff0c;用工厂类调用。逐个完成。 没什么漂亮的代码&#xff0c;只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...