对约束进行命名
必须对以下约束进行命名。
-
PRIMARY KEY
-
REFERENCES
(外键) -
CHECK
-
UNIQUE
在定义这些约束时对它们进行命名。如果您未分配名称,Vertica 会自动分配名称。
用户分配的约束名称
当您使用
CREATE TABLE
或
ALTER TABLE...ADD CONSTRAINT
定义约束时,您可以为约束分配名称。例如,以下 CREATE TABLE
语句分别对主键约束和检查约束 pk
和 date_c
进行命名:
=> CREATE TABLE public.store_orders_2016
(
order_no int CONSTRAINT pk PRIMARY KEY,
product_key int,
product_version int,
order_date timestamp NOT NULL,
shipper varchar(20),
ship_date date,
CONSTRAINT date_c CHECK (date_part('year', order_date)::int = 2016)
)
PARTITION BY ((date_part('year', order_date))::int);
CREATE TABLE
以下 ALTER TABLE
语句添加外键约束 fk
:
=> ALTER TABLE public.store_orders_2016 ADD CONSTRAINT fk
FOREIGN KEY (product_key, product_version)
REFERENCES public.product_dimension (product_key, product_version);
自动分配的约束名称
对约束进行命名是可选的。如果您不为约束分配名称,Vertica 将使用以下约定分配自己的名称:
C_constraint-type[_integer]
例如,下表定义了两个名为 a
和 b
列,并将它们限制为仅包含唯一值:
=> CREATE TABLE t1 (a int UNIQUE, b int UNIQUE );
CREATE TABLE
当您使用
EXPORT_TABLES
导出表的 DDL 时,该函数的输出中显示 Vertica 已为 a
列分配约束名称 C_UNIQUE
,已为 b
列分配约束名称 C_UNIQUE_1
:
=> SELECT EXPORT_TABLES('','t1');
CREATE TABLE public.t1
(
a int,
b int,
CONSTRAINT C_UNIQUE UNIQUE (a) DISABLED,
CONSTRAINT C_UNIQUE_1 UNIQUE (b) DISABLED
);
(1 row)
查看约束名称
您可以通过使用
EXPORT_TABLES
导出表的 DDL 来查看表约束的名称,如前面所示。您还可以查询以下系统表:
例如,以下查询获取 online_sales
架构中所有主键约束和外键约束的名称:
=> SELECT table_name, constraint_name, column_name, constraint_type FROM constraint_columns
WHERE constraint_type in ('p','f') AND table_schema='online_sales'
ORDER BY table_name, constraint_type, constraint_name;
table_name | constraint_name | column_name | constraint_type
-----------------------+---------------------------+-----------------+-----------------
call_center_dimension | C_PRIMARY | call_center_key | p
online_page_dimension | C_PRIMARY | online_page_key | p
online_sales_fact | fk_online_sales_cc | call_center_key | f
online_sales_fact | fk_online_sales_customer | customer_key | f
online_sales_fact | fk_online_sales_op | online_page_key | f
online_sales_fact | fk_online_sales_product | product_version | f
online_sales_fact | fk_online_sales_product | product_key | f
online_sales_fact | fk_online_sales_promotion | promotion_key | f
online_sales_fact | fk_online_sales_saledate | sale_date_key | f
online_sales_fact | fk_online_sales_shipdate | ship_date_key | f
online_sales_fact | fk_online_sales_shipping | shipping_key | f
online_sales_fact | fk_online_sales_warehouse | warehouse_key | f
(12 rows)
使用约束名称
您必须引用约束名称才能执行以下任务:
-
启用或禁用约束强制执行。
-
删除约束。
例如,以下 ALTER TABLE
语句在 store_orders_2016
表中启用对 pk
约束的强制执行:
=> ALTER TABLE public.store_orders_2016 ALTER CONSTRAINT pk ENABLED;
ALTER TABLE
以下语句删除同一个表中的另一个约束:
=> ALTER TABLE public.store_orders_2016 DROP CONSTRAINT date_c;
ALTER TABLE