为当前事务设置约束检查模式。
语法
SET CONSTRAINTS { ALL | name [, ...] } { DEFERRED | IMMEDIATE }
说明
SET CONSTRAINTS
设置当前事务中的约束检查行为。在每个语句的末尾检查 IMMEDIATE
约束。在事务提交之前不会检查 DEFERRED
约束。每个约束均具有自己的 IMMEDIATE
或 DEFERRED
模式。
在创建约束时,将为其赋予以下三个特性之一:DEFERRABLE INITIALLY DEFERRED
、DEFERRABLE INITIALLY IMMEDIATE
或 NOT DEFERRABLE
。第三个类始终是 IMMEDIATE
,并且不受 SET CONSTRAINTS
命令的影响。前两个类以指示的模式启动每个事务,但可以通过 SET CONSTRAINTS
在事务中更改它们的行为。
具有约束名称列表的 SET CONSTRAINTS
仅更改那些约束(它们全都必须是可延迟的)的模式。如果有多个约束匹配任一给定名称,则所有约束都会受到影响。SET CONSTRAINTS ALL
更改所有可延迟约束的模式。
当 SET
CONSTRAINTS
将约束模式从 DEFERRED
更改为 IMMEDIATE
时,新模式有追溯效力:在执行 SET
CONSTRAINTS
命令期间,将检查在事务结束时检查过的任何未完成的数据修改。如果违反此类的任何约束,则 SET CONSTRAINTS
将失败(并且不会更改约束模式)。因此,SET CONSTRAINTS
可用于强制检查在事务中的特定点出现的约束。
目前,此设置仅影响外键约束。检查和唯一约束总是有效地不可延迟。