11.4. 唯一索引

索引還可以用於強迫字串數值的唯一性,或者是多個字串組合值的唯一性。

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

目前,只有 B-tree 索引可以聲明為唯一的。

如果索引聲明為唯一的,那麼就不允許出現多個索引值相同的行。 我們認為 NULL 值相互間不相等。 一個多字串唯一索引認為只有兩行資料裡所有被索引字串都相同的時候才是相同的,這種資料才被拒絕。

如果一個資料表聲明了一個唯一約束或者一個主鍵, 那麼 PostgreSQL 自動在那些組成主鍵或者唯一字串的列上建立唯一索引(可能地話是一個多字串索引), 以強迫這些約束。

注意: 給一個資料表增加唯一約束的比較好的辦法是 ALTER TABLE ... ADD CONSTRAINT。 用索引強制唯一約束應該認為是一個實現細節,而不應該直接訪問。 不過,我們應該知道,我們沒有必要在唯一字串上建立索引,那樣做只會重複建立自動建立的索引。