创建约束¶
可以使用 CREATE TABLE 在创建表时创建约束,也可以稍后使用 ALTER TABLE 将约束添加到表中:
单列约束可以作为列定义的一部分以内联方式创建。
必须在指定约束中的列的单独(即行外)子句中创建多列约束。
若要创建约束,必须对用于创建约束的角色授予某些访问控制权限。有关更多信息,请参阅 访问控制要求。
创建内联约束¶
以下内联语法只能用于单列约束:
CREATE [ OR REPLACE ] TABLE <name> (<column_name> <column_type> [ <inline_constraint> ] , ... )
ALTER TABLE <name> ADD COLUMN <column_name> <column_type> [ <inline_constraint> ]
有关 inline_constraint
语法的详细信息,请参阅 CREATE | ALTER TABLE ...CONSTRAINT。
创建行外约束¶
以下行外语法必须用于多列约束,但也可用于单列约束:
CREATE [ OR REPLACE ] TABLE <name> ( ... , [ <outofline_constraint> ], ... )
ALTER TABLE <name> ADD <outofline_constraint>
有关 outofline_constraint
语法的详细信息,请参阅 CREATE | ALTER TABLE ...CONSTRAINT。
CREATETABLE...LIKE 和 CLONE 中的限制¶
Snowflake 支持使用 CREATE TABLE 创建表的副本:
要创建空副本,请使用 CREATE TABLE ...LIKE。
要创建克隆,请使用 CREATE TABLE ...CLONE。
此外,克隆架构或数据库时会自动创建表的副本。
无论以何种方式为表创建副本,都会复制原始表上的约束。使用引用表(外键表)和被引用表(主键表)复制外键时,可能会出现以下情况:
如果在同一命令中复制两个表(例如在克隆架构或数据库期间),则会在新的引用表和被引用表之间创建一个新的外键。
如果仅复制引用表,则会在引用表上创建一个新的外键,该外键指向作为引用表的原始主键表。
如果仅复制被引用表,则不会创建新的外键,尽管会复制主键/唯一键。
因此,如果您分别复制引用表和被引用表,则必须手动创建新的外键,或手动更改新外键的主键表。