约束属性

约束属性在 CREATE TABLEALTER TABLE 命令的 CONSTRAINT 子句中指定。

本主题内容:

ANSI SQL 约束属性

所有约束的属性

ANSI SQL 标准中的以下约束属性适用于所有约束(唯一、主键和外键):

{ ENFORCED | NOT ENFORCED }

指定是否在事务中强制执行约束。请注意,NOT NULL 是 Snowflake 唯一 强制执行的约束。请参阅 参照完整性约束

{ DEFERRABLE | NOT DEFERRABLE }

指定在后续事务中是否可将约束检查推迟到事务结束。

INITIALLY { DEFERRED | IMMEDIATE }

对于 DEFERRABLE 约束,指定是否从下一个事务开始推迟对于约束的检查。

标准约束属性的默认值为:

NOT ENFORCED DEFERRABLE INITIALLY DEFERRED

仅适用于外键约束的属性

以下约束属性也来自 ANSI SQL 标准,但仅适用于外键:

MATCH { FULL | PARTIAL | SIMPLE }

指定外键是否满足一个或多个列中的 NULL 值。

UPDATE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION }

指定更新外键的主键/唯一键时执行的操作。

DELETE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION }

指定删除外键的主键/唯一键时执行的操作。

外键约束属性的默认值为:

MATCH FULL UPDATE NO ACTION DELETE NO ACTION

扩展的约束属性

以下属性未包含在 ANSI SQL 标准中,但为兼容其他数据库,支持这些属性。它们适用于所有约束(唯一键、主键和外键):

{ ENABLE | DISABLE }

指定启用还是禁用约束。提供这些属性的目的是兼容 Oracle。

默认情况下,此约束属性设置为 DISABLE

{ VALIDATE | NOVALIDATE }

指定在创建约束时是否验证表中现有数据。仅与 { ENABLE | DISABLE} 属性配合使用。

默认情况下,此约束属性设置为 NOVALIDATE

{ RELY | NORELY }

指定在查询重写期间是否考虑模式中的 NOVALIDATE 约束。

默认情况下,此约束属性设置为 NORELY

如果已确保表中的数据符合约束条件,则可以将其更改为 RELY,表示查询优化器应预计表中的数据遵守约束条件。设置 RELY 属性可以提高查询性能(例如,通过 消除不必要的联接)。

对于主键约束和外键约束,请在主键约束和外键约束上设置此属性。例如:

ALTER TABLE table_with_primary_key ALTER CONSTRAINT a_primary_key_constraint RELY;
ALTER TABLE table_with_foreign_key ALTER CONSTRAINT a_foreign_key_constraint RELY;
Copy

ENABLEVALIDATE 约束属性的非默认值

为了保证与其他数据库的语法兼容性,Snowflake 支持为约束属性指定非默认值。

但如果在创建新约束时指定了 ENABLEVALIDATE (这些属性的非默认值),则 不会创建约束。这不适用于 RELY。指定 RELY 会导致创建新约束。

请注意,Snowflake 提供了一个会话参数 UNSUPPORTED_DDL_ACTION,用于指定在约束创建期间指定非默认值是否会生成错误。

语言: 中文