SET CONSTRAINTS
SET CONSTRAINTS - 设置当前事务的约束检查时间
语法格式
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可用于强制检查在事务中的特定点发生的约束。
目前,此设置仅影响 UNIQUE , PRIMARY KEY , REFERENCES (外键)和EXCLUDE 约束。插入或修改行时(或不在语句末尾),始终会立即检查 NOT NULL和 CHECK 约束。还会立即检查尚未声明的唯一性和排除约束 DEFERRABLE 。
声明为”约束触发器”的触发器的触发也由此设置控制 -它们在应检查相关约束的同时触发。
注意事项
因为Vastbase E100不要求约束名在模式中是唯一的(但只是每个表),所以指定的约束名可能有多个匹配。在这种情况下,SET CONSTRAINTS将对所有比赛采取行动。对于非模式限定名称,一旦在搜索路径中的某个模式中找到匹配项或匹配项,则不会搜索路径中稍后出现的模式。
此命令仅改变当前事务中约束的行为。在事务块之外发出此消息会发出警告,否则无效。
兼容性
此命令符合SQL标准中定义的行为,但在Vastbase E100中,它不适用于 NOT NULL和 CHECK 约束的限制除外。此外,Vastbase E100会立即检查不可延迟的唯一性约束,而不是像标准所暗示的那样在语句结束时检查。