使用 MERGE 语句,通过在单个 SQL 语句内综合 UPDATE 或 DELETE 操作与 INSERT 操

作,来将数据从源表转移到目标表内。您还可使用此语句来将源表与目标表合并,然后对目标表仅

执行 UPDATE 操作,仅执行 DELETE 操作,或仅执行 INSERT 操作。

用法

GBase 8s 的 MERGE 语句是数据操纵语言(DML)语句,将源表对象与目标表或视图结合。您在

ON 关键字之后指定的 condition 决定在目标上的 UPDATE 或 DELETE 操作中使用源对象的哪

一行,以及在目标上的 INSERT 操作中使用哪一行。MERGE 语句不更改源对象条件必须后跟 Delete 或 Update 子句的 WHEN MATCHED THEN 关键字,或后跟 Insert 子句的

WHEN NOT MATCHED THEN 关键字,或后跟 Update(或 Delete)以及 Insert 子句。

如果您指定 Update 和 Insert 两个子句,则 MERGE 语句可在目标对象上执行 INSERT

和 UPDATE 两个操作。

如果您指定 Delete 和 Insert 两个子句,则 MERGE 语句可在目标对象上执行 INSERT

和 DELETE 两个操作。

如果您未指定 Insert 子句,则不执行 INSERT 操作,但 Update 子句必须在满足该条件

的源行的目标对象上指定 UPDATE 操作(抑或 Delete 子句必须指定 DELETE 操作)。

如果您未指定 Update 子句且未指定 Delete 子句,则不执行 UPDATE 或 DELETE 操

作,但 Insert 子句必须为不匹配该对象的源行指定目标对象上的 INSERT 操作。

如果未指定 Delete 子句,未指定 Update 子句,且未指定 Insert 子句,则 MERGE 语句失败并提

示错误。

MERGE 语句可对目标对象产生下列影响:

如果包括 Update 子句,则 MERGE 语句根据 SET 子句的规范,以源表中该条件取值为

真的行的数据更新目标表或视图中的行。

如果包括 Delete 子句,则 MERGE 语句从目标表或视图删除该条件取值为真的行。

如果包括 Insert 子句,则 MERGE 语句根据 VALUES 子句的规范,以源表中该条件取

值为假的行数据,向目标表或视图内插入新行。

然而,单个 MERGE 语句仅可有这三个影响中的两个,因为 Delete 子句与 Update 子句是互斥的。

对于大型表上的操作,请确保在您的系统上可获得这些资源:

足够数量的锁

用于中间的结合结果的足够的临时 dbspace 存储

用于 MERGE 语句的结果的充足的 dbspace 存储。

在高可用性集群配置中,您可从主服务器或从可更新的辅助服务器发出 MERGE 语句。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐