Table-constraint
为表元数据添加约束。您可以使用
CREATE TABLE
指定表约束,或使用
ALTER TABLE
将约束添加到现有表。有关详细信息,请参阅设置约束。
注意
向视图中所引用的表添加约束不会对视图产生影响。语法
[ CONSTRAINT constraint-name ]
{
... PRIMARY KEY (column[,... ]) [ ENABLED | DISABLED ]
... | FOREIGN KEY (column[,... ] ) REFERENCES table [ (column[,...]) ]
... | UNIQUE (column[,...]) [ ENABLED | DISABLED ]
... | CHECK (expression) [ ENABLED | DISABLED ]
}
参数
-
CONSTRAINT constraint‑name
- 为约束分配名称。Vertica 建议对所有约束进行命名。
PRIMARY KEY
- 定义一个或多个
NOT NULL
列作为主键,如下所示:PRIMARY KEY (column[,...]) [ ENABLED | DISABLED]
可以使用关键字
ENABLED
或DISABLED
来限定此子句。请参阅下面的强制执行约束。如果您没有命名主键约束,Vertica 会分配名称
C_PRIMARY
。 FOREIGN KEY
- 添加引用完整性约束,以将一个或多个列定义为外键,如下所示:
FOREIGN KEY (column[,... ]) REFERENCES table [(column[,... ])]
如果省略了 column,Vertica 将引用 table 中的主键。
如果您没有命名外键约束,Vertica 会分配名称
C_FOREIGN
。重要
添加外键约束需要以下权限(除了 ALTER TABLE 也需要的权限外):
-
对引用表的 REFERENCES 权限
-
对引用表架构的 USAGE 权限
-
UNIQUE
- 指定一个列或一组列中的数据对于所有表行都是唯一的,如下所示:
UNIQUE (column[,...]) [ENABLED | DISABLED]
可以使用关键字
ENABLED
或DISABLED
来限定此子句。请参阅下面的强制执行约束。如果您没有命名唯一约束,Vertica 会分配名称
C_UNIQUE
。 CHECK
- 指定检查条件,即一个返回布尔值的表达式,如下所示:
CHECK (expression) [ENABLED | DISABLED]
可以使用关键字
ENABLED
或DISABLED
来限定此子句。请参阅下面的强制执行约束。如果您没有命名检查约束,Vertica 会分配名称
C_CHECK
。
权限
非超级用户:表所有者,或以下权限:
-
对架构的 USAGE 权限
-
对表的 ALTER 权限
-
对表的 SELECT 权限,用于在表上启用或禁用约束实施
强制执行约束
表可以使用关键字 ENABLED
或 DISABLED
指定 Vertica 是否自动强制执行主键、唯一键或检查约束。如果省略了 ENABLED
或 DISABLED
,Vertica 会通过检查相应的配置参数来确定是否自动启用约束:
-
EnableNewPrimaryKeysByDefault
-
EnableNewUniqueKeysByDefault
-
EnableNewCheckConstraintsByDefault
有关详细信息,请参阅约束强制执行。
示例
以下示例将使用主键约束创建一个表 (t01
)。
CREATE TABLE t01 (id int CONSTRAINT sampleconstraint PRIMARY KEY);
CREATE TABLE
此示例没有使用约束创建相同表,然后添加约束 ALTER TABLE ADD CONSTRAINT
CREATE TABLE t01 (id int);
CREATE TABLE
ALTER TABLE t01 ADD CONSTRAINT sampleconstraint PRIMARY KEY(id);
WARNING 2623: Column "id" definition changed to NOT NULL
ALTER TABLE
以下示例创建一个包含两列的表 (addapk
),向表中添加第三列,然后在第三列上添加主键约束。
=> CREATE TABLE addapk (col1 INT, col2 INT);
CREATE TABLE
=> ALTER TABLE addapk ADD COLUMN col3 INT;
ALTER TABLE
=> ALTER TABLE addapk ADD CONSTRAINT col3constraint PRIMARY KEY (col3) ENABLED;
WARNING 2623: Column "col3" definition changed to NOT NULL
ALTER TABLE
使用示例表 addapk
,检查是否启用了主键约束(is_enabled
为 t
)。
=> SELECT constraint_name, column_name, constraint_type, is_enabled FROM PRIMARY_KEYS WHERE table_name IN ('addapk');
constraint_name | column_name | constraint_type | is_enabled
-----------------+-------------+-----------------+------------
col3constraint | col3 | p | t
(1 row)
此示例使用 ALTER TABLE ALTER CONSTRAINT
禁用约束。
=> ALTER TABLE addapk ALTER CONSTRAINT col3constraint DISABLED;
检查主键现在是否已禁用(is_enabled
为 f
)。
=> SELECT constraint_name, column_name, constraint_type, is_enabled FROM PRIMARY_KEYS WHERE table_name IN ('addapk');
constraint_name | column_name | constraint_type | is_enabled
-----------------+-------------+-----------------+------------
col3constraint | col3 | p | f
(1 row)