为当前事务设置约束检查模式。

语法

SET CONSTRAINTS { ALL | name [, ...] } { DEFERRED | IMMEDIATE }

说明

SET CONSTRAINTS 设置当前事务中的约束检查行为。在每个语句的末尾检查 IMMEDIATE 约束。在事务提交之前不会检查 DEFERRED 约束。每个约束均具有自己的 IMMEDIATEDEFERRED 模式。

在创建约束时,将为其赋予以下三个特性之一:DEFERRABLE INITIALLY DEFERREDDEFERRABLE INITIALLY IMMEDIATENOT DEFERRABLE。第三个类始终是 IMMEDIATE,并且不受 SET CONSTRAINTS 命令的影响。前两个类以指示的模式启动每个事务,但可以通过 SET CONSTRAINTS 在事务中更改它们的行为。

具有约束名称列表的 SET CONSTRAINTS 仅更改那些约束(它们全都必须是可延迟的)的模式。如果有多个约束匹配任一给定名称,则所有约束都会受到影响。SET CONSTRAINTS ALL 更改所有可延迟约束的模式。

SET CONSTRAINTS 将约束模式从 DEFERRED 更改为 IMMEDIATE 时,新模式有追溯效力:在执行 SET CONSTRAINTS 命令期间,将检查在事务结束时检查过的任何未完成的数据修改。如果违反此类的任何约束,则 SET CONSTRAINTS 将失败(并且不会更改约束模式)。因此,SET CONSTRAINTS 可用于强制检查在事务中的特定点出现的约束。

目前,此设置仅影响外键约束。检查和唯一约束总是有效地不可延迟。

说明 此命令仅更改当前事务中的约束行为。因此,如果在事务块之外执行此命令,它将不会产生任何影响。