Mysql

為什麼我們有主鍵時需要唯一鍵?

  • January 24, 2022

我試圖用Google搜尋這個問題,但我發現的只是主鍵和唯一鍵之間的區別,為什麼當我們有一個可以辨識任何單個記錄的主鍵時,我們實際上需要一個唯一鍵,有人可以提供一個例子來解釋這個或提供一個解釋這一點的連結。

當我們有一個主鍵時,為什麼我們實際上需要一個唯一鍵?

簡短的回答——你沒有。

長答案:

在 MySQL 中,PRIMARY KEYis a UNIQUEkey 是INDEX.

只有一個PRIMARY KEY;它的主要功能是唯一標識每一行。

一個UNIQUE鍵允許包含一個列NULLable

UNIQUE是唯一性約束和索引。

任何類型的索引都可能包含多個列;定義中列的順序很重要。(子句中條件的順序WHERE無關緊要。)

AFOREIGN 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)

如果您建構一個沒有 aPRIMARY KEY但有UNIQUE鍵的表,請考慮將“唯一”更改為“主鍵”。

一個表很少需要 3 個UNIQUE鍵(包括 PK);重新考慮架構。

一些程序員總是有一個AUTO_INCREMENT(通常命名為id)作為PRIMARY KEY. 但這並不總是必要的,而且有時會干擾性能。

警告:上述某些陳述可能不適用於 MySQL 和 MariaDB 以外的 RDBMS。

警告:索引前綴、分區和其他一些晦澀的東西沒有在上面介紹。

PK + UNIQUE 的兩種常見情況:

  • 查找表(用於“規範化”):該表有一個id(auto_increment,PK)和一個字元串(Unique)。
  • 多對映射表:兩列,每列都指向id其他表。PK 將是按某種順序排列的一對列;這UNIQUE將是另一個順序的對。(從技術上講,對於第二個索引來說,plainINDEX就足夠了。)

引用自:https://dba.stackexchange.com/questions/306416