为什么空值不受唯一约束的尊重,而是受到POSTGRES中SELECT distinct查询的尊重?

时间:2018-03-21 11:04:44

标签: sql database postgresql distinct unique-constraint

我正在使用postgres。我创建了一个示例表,其架构如下所示: -

postgres=# \d temp;
                         Table "public.temp"
 Column |  Type   |                     Modifiers
--------+---------+---------------------------------------------------
 id     | integer | not null default nextval('temp_id_seq'::regclass)
 name   | text    |
Indexes:
    "temp_pkey" PRIMARY KEY, btree (id)
    "temp_name_key" UNIQUE CONSTRAINT, btree (name)

允许我多次插入空值。

postgres=# select * from temp;
 id | name
----+------
  1 |
(1 row)

postgres=# insert into temp
(name)
values
(null);
INSERT 0 1
postgres=# select * from temp;
 id | name
----+------
  1 |
  2 |
(2 rows)

我知道postgres根据sql标准不考虑唯一约束的空值,但是当我尝试使用select查询进行区分时,它会尊重空值。

postgres=# select distinct name from temp;
 name
------

(1 row)

所以,我不清楚为什么两个空值在插入操作中的唯一约束的上下文中是不同的,但在不同的select操作的情况下是相同的。

0 个答案:

没有答案