目录
文章目录
目录PostgreSQL 的外键关联创建表时定义外键(References,参照)修改原有表的外键约束删除外键约束参考文档
PostgreSQL 的外键关联
一个外键约束指定一列(或一组列)中的值必须匹配出现在另一个表中某些行的值。我们说这维持了两个关联表之间的引用完整性。注意,一个从表外键所引用的主表 Column 必须是一个主键或者是被唯一约束所限制的。这意味着主表被引用的列总是拥有一个索引(位于主键或唯一约束之下的索引),因此在其上进行的一个引用行是否匹配的检查将会很高效。
创建表时定义外键(References,参照)
CREATE TABLE products
(
product_no
integer PRIMARY KEY,
name
text,
price
numeric
);
CREATE TABLE orders
(
order_id
integer PRIMARY KEY,
product_no
integer REFERENCES products
(product_no
),
quantity
integer
);
CREATE TABLE orders
(
order_id
integer PRIMARY KEY,
product_no
integer REFERENCES products
,
quantity
integer
);
CREATE TABLE t1
(
a
integer PRIMARY KEY,
b
integer,
c
integer,
FOREIGN KEY (b
, c
) REFERENCES other_table
(c1
, c2
)
);
CREATE TABLE products
(
product_no
integer PRIMARY KEY,
name
text,
price
numeric
);
CREATE TABLE orders
(
order_id
integer PRIMARY KEY,
shipping_address
text,
...
);
CREATE TABLE order_items
(
product_no
integer REFERENCES products
,
order_id
integer REFERENCES orders
,
quantity
integer,
PRIMARY KEY (product_no
, order_id
)
);
CREATE TABLE products
(
product_no
integer PRIMARY KEY,
name
text,
price
numeric
);
CREATE TABLE orders
(
order_id
integer PRIMARY KEY,
shipping_address
text,
...
);
CREATE TABLE order_items
(
product_no
integer REFERENCES products
ON DELETE RESTRICT,
order_id
integer REFERENCES orders
ON DELETE CASCADE,
quantity
integer,
PRIMARY KEY (product_no
, order_id
)
);
修改原有表的外键约束
格式:
ALTER TABLE 从表名
ADD CONSTRAINT 外键约束名
FOREIGN KEY (从表的外键
) REFERENCES 主表名
(主表的主键
);
注意:如果要给一个已存在的表添加 ON DELETE CASCADE 的外键约束,需要如下步骤:
删除已存在的外键约束。添加一个 ON DELETE CASCADE 的外键约束。
删除外键约束
格式:
alter table 从表名
drop constraint 从表的外键约束名
;
参考文档
http://www.postgres.cn/docs/12/ddl-constraints.html#DDL-CONSTRAINTS-FK