设置约束

您可以使用 CREATE TABLE 分别对新表和现有表设置约束ALTER TABLE...ADD CONSTRAINT

对新表设置约束

CREATE TABLE 可以通过两种方式指定约束:作为列定义的一部分,或遵循所有列定义。

例如,以下 CREATE TABLE 语句对 sku_numberNOT NULLUNIQUE 列设置两个约束。在定义了所有列之后,该语句还设置一个由以下两列组成的主键:product_keyproduct_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)