根据测试,两个 SQL 给出相同的结果。
alter table public.company add constraint company_name_key unique ("name")
与
alter table public.company add unique ("name");
PostgreSQL(12.16 版)
没有区别,因为您决定使用 PostgreSQL 默认使用的相同约束名称。错误消息将是
ERROR: duplicate key value violates unique constraint "company_name_key"
在这两种情况下。您将使用可以决定名称的版本,当您想要不同的名称时,请说出以 c_ 开头的每个约束名称。
在使用具有许多表和大量层次结构的大型数据库时,为了具有描述性,表名和列名可能会变得很长。假设您有一个名为
customer_order_item_customs_tariff
的表,其中有一列名为 customs_tariff_document_number
。 PostgreSQL 将调用你的约束
customer_order_item_customs_t_customs_tariff_document_numbe_key
但也许你更喜欢类似的东西
c_corderitemtariff_docno
我认为 PostgreSQL 在这方面做得非常好。我喜欢自动生成的名称。但如果您不这样做,请使用
ALTER TABLE
的详细版本来添加与您的命名约定或喜好相匹配的唯一约束。
标准 ISO SQL 语言承认这两种语法。在第一个中,您选择约束的名称,而第二个将通过内部 RDBMS 进程生成约束的名称。
更改/删除约束时,您需要给出约束的名称。 这就是为什么我会提倡第一个。