【PostgreSQL】约束链接
检查
唯一
主键
外键
排他
唯一约束是数据库中的一种约束,用于确保某个列或字段的值在该列或字段中是唯一的。唯一约束可用于确保数据库表中的某个列中的值是唯一的,也可用于确保多个列的组合值是唯一的。
在创建表时,可以通过在列的定义中添加UNIQUE关键字来创建唯一约束。唯一约束可以防止在表中插入重复的值,并确保每个值在该列中只出现一次。
例如,创建一个名称为students的表,并在该表的学号(ID)列上添加唯一约束,可以使用以下SQL语句:
CREATE TABLE students ( ID int UNIQUE, Name varchar(50), Age int, Gender char(1) );
在上述示例中,唯一约束被应用于ID列,表示在该列中的值必须是唯一的。
当尝试向该表中插入一个已经存在的值时,将会引发唯一约束冲突的错误。
唯一约束可确保一列或一组列中包含的数据在表中的所有行中是唯一的。语法为:
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 树索引。仅涵盖某些行的唯一性限制不能写为唯一约束,但可以通过创建唯一部分索引来强制实施此类限制。
通常,如果表中有多个行,且约束中包含的所有列的值相等,则违反唯一约束。默认情况下,在此比较中,两个 null 值不被视为相等。这意味着,即使存在唯一约束,也可以将包含 null 值的重复行存储在至少一个受约束列中。可以通过添加子句来更改此行为,例如NULLS NOT DISTINCT
CREATE TABLE products (
product_no integer UNIQUE NULLS NOT DISTINCT,
name text,
price numeric
);
或
CREATE TABLE products (
product_no integer,
name text,
price numeric,
UNIQUE NULLS NOT DISTINCT (product_no)
);
可以使用NULLS DISTINCT显式指定缺省行为。唯一约束中的默认 null 处理是根据 SQL 标准定义的实现,其他实现具有不同的行为。因此,在开发旨在实现可移植的应用程序时要小心。