设置约束
您可以使用
CREATE TABLE
和
分别对新表和现有表设置约束ALTER TABLE...ADD CONSTRAINT
。
对新表设置约束
CREATE TABLE
可以通过两种方式指定约束:作为列定义的一部分,或遵循所有列定义。
例如,以下 CREATE TABLE
语句对 sku_number
、NOT NULL
和 UNIQUE
列设置两个约束。在定义了所有列之后,该语句还设置一个由以下两列组成的主键:product_key
和 product_version
:
=> CREATE TABLE public.prod_dimension(
product_key int,
product_version int,
product_description varchar(128),
sku_number char(32) NOT NULL UNIQUE,
category_description char(32),
CONSTRAINT pk PRIMARY KEY (product_key, product_version) ENABLED
);
CREATE TABLE
对现有表设置约束
ALTER TABLE...ADD CONSTRAINT
向现有表添加约束。例如,以下语句为 product_version
列指定唯一值:
=> ALTER TABLE prod_dimension ADD CONSTRAINT u_product_versions UNIQUE (product_version) ENABLED;
ALTER TABLE
验证现有数据
在已包含数据的列上添加约束时,如果以下条件都成立,Vertica 会立即验证列值:
如果其中任何一个条件不成立,Vertica 不会验证列值。在这种情况下,您必须调用
ANALYZE_CONSTRAINTS
来查找约束违规。否则,查询可能会返回意外结果。有关详细信息,请参阅检测约束违规。
导出表约束
无论您是在列定义中还是在表中指定约束,Vertica 都会将表 DDL 存储为 CREATE
语句的一部分,并将约束导出。有一个例外:外键作为 ALTER TABLE
语句存储和导出。
例如:
=> SELECT EXPORT_TABLES('','prod_dimension');
...
CREATE TABLE public.prod_dimension
(
product_key int NOT NULL,
product_version int NOT NULL,
product_description varchar(128),
sku_number char(32) NOT NULL,
category_description char(32),
CONSTRAINT C_UNIQUE UNIQUE (sku_number) DISABLED,
CONSTRAINT pk PRIMARY KEY (product_key, product_version) ENABLED,
CONSTRAINT u_product_versions UNIQUE (product_version) ENABLED
);
(1 row)