在 MERGE 操作中,强制对目标对象启用数据完整性约束。
如果检查模式设置为 DEFERRED,则直到提交该事务之后,才检查这些约束。
如果目标表的约束检查模式设置为 IMMEDIATE,则在所有 UPDATE(或 DELETE)和
INSERT 操作完成之后,检查唯一约束和引用约束。在 UPDATE、DELETE 和 INSERT
操作期间,检查 NOT NULL 和检查约束。
要获取关于设置约束检查模式的信息,请参阅主题 SET Transaction Mode 语句。
如果以 ON DELETE CASCADE 关键字定义了目标表上的引用约束,则 MERGE 语句的 DELETE
子句还对目标表的孩子表的行执行级联删除。
然而,如果启用了的引用约束已在目标和源表之间建立了父子关系,则 Delete 合并失败。MERGE
语句不可在其源表上执行级联删除。要获取更多信息,请参阅主题 表有级联删除时对 DELETE 的
限制。
如果 START VIOLATIONS 语句已在目标表上定义了活动的违反表,则 MERGE 可对目标、违反
和诊断表有下列影响:
或删除或更新与结合条件相匹配的目标表中的符合的行。
目标表还收到 MERGE 成功地插入的符合的不相匹配的行。
违反表收到不符合的行。
诊断表收到关于不符合的行不能满足约束的原因的信息,以及对目标表的 MERGE 操作期
间的唯一索引的信息。
要在目标表上启用违反表和诊断表,SET Database Object Mode 语句必须设置约束或目
标表的唯一索引为 ENABLED 或 FILTERING 模式。要了解更多信息,请参阅主题
与 SET Database Object Mode 语句的关系 和 SET Database Object Mode 语句。