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]

可以使用关键字 ENABLEDDISABLED 来限定此子句。请参阅下面的强制执行约束

如果您没有命名主键约束,Vertica 会分配名称 C_PRIMARY

FOREIGN KEY
添加引用完整性约束,以将一个或多个列定义为外键,如下所示:
FOREIGN KEY (column[,... ]) REFERENCES table [(column[,... ])]

如果省略了 column,Vertica 将引用 table 中的主键。

如果您没有命名外键约束,Vertica 会分配名称 C_FOREIGN

UNIQUE
指定一个列或一组列中的数据对于所有表行都是唯一的,如下所示:
UNIQUE (column[,...]) [ENABLED | DISABLED]

可以使用关键字 ENABLEDDISABLED 来限定此子句。请参阅下面的强制执行约束

如果您没有命名唯一约束,Vertica 会分配名称 C_UNIQUE

CHECK
指定检查条件,即一个返回布尔值的表达式,如下所示:
CHECK (expression) [ENABLED | DISABLED]

可以使用关键字 ENABLEDDISABLED 来限定此子句。请参阅下面的强制执行约束

如果您没有命名检查约束,Vertica 会分配名称 C_CHECK

权限

非超级用户:表所有者,或以下权限:

  • 对架构的 USAGE 权限

  • 对表的 ALTER 权限

  • 对表的 SELECT 权限,用于在表上启用或禁用约束实施

强制执行约束

表可以使用关键字 ENABLEDDISABLED 指定 Vertica 是否自动强制执行主键、唯一键或检查约束。如果省略了 ENABLEDDISABLED,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)

有关约束的一般讨论,请参阅约束。有关创建和命名约束的其他示例,请参阅对约束进行命名