11.6. 唯一索引

索引也可以被用来强制列值的唯一性,或者是多个列组合值的唯一性。

CREATE UNIQUE INDEX name ON table (column [, ...])
[ INCLUDE (column [, ...]) ];

当前,只有B-tree能够被声明为唯一。

当一个索引被声明为唯一时,索引中不允许多个表行具有相同的索引值。空值被视为不相同。一个多列唯一索引将会拒绝在所有索引列上具有相同组合值的表行。如果INCLUDE子句中列出了一些列,那么在判断索引项是否相等时不会考虑它们。

PostgreSQL会自动为定义了一个唯一约束或主键的表创建一个唯一索引。该索引包含组成主键或唯一约束的所有列(可能是一个多列索引),它也是用于强制这些约束的机制。

Note

不需要手工在唯一列上创建索引,如果那样做也只是重复了自动创建的索引而已。