GBase 8c数据库支持外键约束。
外键约束指定某列(或一组列)中的值必须匹配出现在另一表中某些行的值,这维持了两个关联表之间的引用完整性。
例如使用过多次的表products:
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
);
这样就不可能创建包含不存在于产品表中的product_no值(非空)的订单。
在这种情况下,订单表是引用表而产品表是被引用表。相应地,也有引用和被引用列的说法。
我们也可以把上述命令简写为:
CREATE TABLE orders (
order_id integer PRIMARY KEY,
product_no integer REFERENCES products,
quantity integer
);
因为如果缺少列的列表,则被引用表的主键将被用作被引用列。
外键也可以约束和引用一组列。同样,它需要被写成表约束的形式。下面是一个例子:
CREATE TABLE t1 (
a integer PRIMARY K