Mysql
為什麼我們有主鍵時需要唯一鍵?
我試圖用Google搜尋這個問題,但我發現的只是主鍵和唯一鍵之間的區別,為什麼當我們有一個可以辨識任何單個記錄的主鍵時,我們實際上需要一個唯一鍵,有人可以提供一個例子來解釋這個或提供一個解釋這一點的連結。
當我們有一個主鍵時,為什麼我們實際上需要一個唯一鍵?
簡短的回答——你沒有。
長答案:
在 MySQL 中,
PRIMARY KEY
is aUNIQUE
key 是INDEX
.只有一個
PRIMARY KEY
;它的主要功能是唯一標識每一行。一個
UNIQUE
鍵允許包含一個列NULLable
。
UNIQUE
是唯一性約束和索引。任何類型的索引都可能包含多個列;定義中列的順序很重要。(子句中條件的順序
WHERE
無關緊要。)A
FOREIGN KEY
是 aCONSTRAINT
並且它隱式地創建一個INDEX
如果還沒有一個適用於約束的。這些對中的每一對都是多餘的;刪除第二個:
PRIMARY KEY (a) UNIQUE (a) INDEX(c,d) INDEX(c) UNIQUE(e) UNIQUE(e,f) UNIQUE(h) UNIQUE(g,h) -- or consider making changing to INDEX(g,h)
如果您建構一個沒有 a
PRIMARY KEY
但有UNIQUE
鍵的表,請考慮將“唯一”更改為“主鍵”。一個表很少需要 3 個
UNIQUE
鍵(包括 PK);重新考慮架構。一些程序員總是有一個
AUTO_INCREMENT
(通常命名為id
)作為PRIMARY KEY
. 但這並不總是必要的,而且有時會干擾性能。警告:上述某些陳述可能不適用於 MySQL 和 MariaDB 以外的 RDBMS。
警告:索引前綴、分區和其他一些晦澀的東西沒有在上面介紹。
PK + UNIQUE 的兩種常見情況:
- 查找表(用於“規範化”):該表有一個
id
(auto_increment,PK)和一個字元串(Unique)。- 多對映射表:兩列,每列都指向
id
其他表。PK 將是按某種順序排列的一對列;這UNIQUE
將是另一個順序的對。(從技術上講,對於第二個索引來說,plainINDEX
就足夠了。)