为当前事务设置约束检查模式。
语法
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 可用于强制检查在事务中的特定点出现的约束。
目前,此设置仅影响外键约束。检查和唯一约束总是有效地不可延迟。