唯一约束
唯一约束可确保列或列组中包含的数据在表中的所有行中都是唯一的。语法是:
声明为列约束:
vastbase=# CREATE TABLE products ( product_no integer UNIQUE, name text, price numeric );
声明为表约束:
vastbase=# CREATE TABLE products ( product_no integer, name text, price numeric, UNIQUE (product_no) );
要为一组列定义唯一约束,请将其写为表约束,并使用逗号分隔列名:
vastbase=# CREATE TABLE example ( a integer, b integer, c integer, UNIQUE (a, c) );
这指定所指示列中的值的组合在整个表中是唯一的,但是任何一列都不需要(通常不是)唯一的。
可以为唯一约束指定自己的名称:
vastbase=# CREATE TABLE products ( product_no integer CONSTRAINT must_be_different UNIQUE, name text, price numeric );
添加唯一约束将自动在约束中列出的列或列组上创建唯一的B树索引。仅覆盖某些行的唯一性限制不能写为唯一约束,但可以通过创建唯一的 partial index 来强制执行此类限制。
通常,如果表中有多行,其中包含的所有列的值都违反了唯一约束约束是平等的。但是,在此比较中,两个空值永远不会被视为相等。这意味着即使存在唯一约束,也可以在至少一个约束列中存储包含空值的重复行。此行为符合SQL标准,但可能其他SQL数据库不遵循此规则。因此在开发可移植的应用程序时要小心。