是否有区别:
CREATE TABLE p(
product_no integer,
name text UNIQUE,
price numeric
);
Run Code Online (Sandbox Code Playgroud)
和:
CREATE TABLE p(
product_no integer,
name text,
price numeric
);
CREATE UNIQUE INDEX customername
ON p
USING btree
(name COLLATE pg_catalog."default");
Run Code Online (Sandbox Code Playgroud)
在这两种情况下名称都是唯一的吗?当索引唯一时意味着什么?
编辑:Postgres 唯一约束与索引没有回答我的问题。它考虑了 FK 的情况。我的问题与 FK 无关。我只想知道这两个操作在这个不涉及 FK 的例子中是否等效。
是的,有一点区别。如果你定义了一个唯一的约束,它在目录中是可见的,比如information_schema. 这不适用于唯一索引。
此外,您可以创建诸如部分唯一索引之类的内容,但不能在约束上执行此操作。
最后,唯一约束是 SQL 标准的。
唯一约束意味着创建唯一索引,但反之则不然。
除非您有充分的理由直接创建唯一索引,否则请使用唯一约束。