其他约束详细信息

本主题内容:

约束的安全权限

要创建主键或唯一约束:

  • 更改现有表以添加约束时,用户的当前角色必须对该表拥有 OWNERSHIP 权限。

  • 创建新表时,用户的当前角色必须对将要创建表的架构拥有 CREATE TABLE 权限。

要创建外键约束:

  • 用户的当前角色必须拥有外键表的 OWNERSHIP 特权。

  • 用户的当前角色必须对唯一/主键表拥有 REFERENCES 权限。

可以使用 GRANT <privileges>REVOKE <privileges> 命令授予角色和撤销角色的 REFERENCES 权限:

GRANT REFERENCES ON TABLE <pk_table_name> TO ROLE <role_name>

REVOKE REFERENCES ON TABLE <pk_table_name> FROM ROLE <role_name>
Copy

约束的注释

与其他数据库对象和构造类似,Snowflake 支持为约束提供注释。可以通过两种方式将注释添加到约束中:

  • 外联约束支持 COMMENT 子句,在定义约束时可以指定注释。

    定义内联约束时不允许使用注释,因为注释可能会导致歧义。

  • 也可以使用 COMMENT 命令对约束设置注释:

    COMMENT [IF EXISTS] ON CONSTRAINT <constraint_name> IS '<comment_string>'
    
    Copy

对复制命令中约束的支持

Snowflake 支持使用 CREATE TABLE 创建表的副本:

  • 要创建空副本,请使用 CREATE TABLE ...LIKE。

  • 要创建克隆,请使用 CREATE TABLE ...CLONE。

此外,克隆架构或数据库时会自动创建表的副本。

无论以何种方式为表创建副本,都会复制原始表上的约束。使用引用表(外键表)和被引用表(主键表)复制外键时,可能会出现以下情况:

  • 如果在同一命令中复制两个表(例如在克隆架构或数据库期间),则会在新的引用表和被引用表之间创建一个新的外键。

  • 如果仅复制引用表,则会在引用表上创建一个新的外键,该外键指向作为引用表的原始主键表。

  • 如果仅复制被引用表,则不会创建新的外键,尽管会复制主键/唯一键。

因此,如果用户分别复制引用表和被引用表,则必须手动创建新的外键,或手动更改新外键的主键表。

对 GET_DDL 中约束的支持

Snowflake 支持对 GET_DDL 的约束;但是,请注意以下几点:

  • 仅单列约束(如 NOT NULLDEFAULT)是根据列的定义重新构造的内联。

  • 表约束(如唯一键/主键/外键)始终被重新构造为外联约束,即使它们由单个列组成也是如此。

  • 对于未命名的约束(即具有系统生成名称的约束),GET_DDL 不会返回系统生成的名称。

语言: 中文