唯一约束与唯一索引?

时间:2015-10-01 11:33:45

标签: sql postgresql

之间是否存在差异:

CREATE TABLE p(
    product_no integer,
    name text UNIQUE,
    price numeric
);

CREATE TABLE p(
        product_no integer,
        name text,
        price numeric
 );
CREATE UNIQUE INDEX customername
  ON p
  USING btree
  (name COLLATE pg_catalog."default");

两种情况下名称都是唯一的吗?当索引是唯一的时,它意味着什么?

编辑Postgres unique constraint vs index没有回答我的问题。它考虑了FK的案例。我的问题与FK没有任何关系。我只是想知道这两个操作是否等效在此示例中,其中不涉及FK。

2 个答案:

答案 0 :(得分:4)

是的,有一点不同。如果您定义了唯一的约束,则它在information_schema等目录中可见。对于唯一索引,情况并非如此。

此外,您可以创建部分唯一索引等内容,但不能在约束上执行此操作。

最后,唯一约束是SQL标准。

唯一约束暗示创建唯一索引,但反之亦然。

使用唯一约束,除非您有充分的理由直接创建唯一索引。

答案 1 :(得分:2)

来自documentation

  

添加唯一约束将自动创建唯一的btree   约束

中使用的列或列组的索引

因此,对于您的简化示例,它们是等效的