GBase 8c 数据库支持唯一约束。
唯一约束保证在某一列中或者一组列中保存的数据在表中所有行间是唯一的。建立列约束的语法是:
CREATE TABLE products (
product_no integer UNIQUE,
name text,
price numeric
);
建立表约束的语法是:
CREATE TABLE products (
product_no integer,
name text,
price numeric,
UNIQUE (product_no)
);
当写入表约束时,要为一组列定义一个唯一约束,把它写作一个表级约束,列名用逗号分隔:
CREATE TABLE example (
a integer,
b integer,
c integer,
UNIQUE (a, c)
);
指定这些列的组合值在整个表的范围内是唯一的,但其中任意一列的值并不需要是唯一的。
通常我们可以建立唯一索引:
CREATE TABLE products (
product_no integer CONSTRAINT must_be_different UNIQUE,
name text,
price numeric
);
增加一个唯一约束会在约束中列出的列或列组上自动创建一个唯一B-tree索引。只覆盖某些行的唯一性限制不能被写为一个唯一约束,但可以通过创建一个唯一的部分索引来强制这种限制。
通常,如果表中有超过一行在约束所包括列上的值相同,将会违反唯一约束。但是在这种比较中,两个空值被认为是不同的。这意味着即便存在一个唯一约束,也可以存储多个在至少一个被约束列中包含空值的行。