主鍵和索引的區別

2021-06-23 01:07:55 字數 1379 閱讀 4305

主鍵(primary key )

來自msdn的描述:

表通常具有包含唯一標識表中每一行的值的一列或一組列。這樣的一列或多列稱為表的主鍵 (pk),用於強制表的實體完整性。在建立或修改表時,您可以通過定義 primary key 約束來建立主鍵。

乙個表只能有乙個 primary key 約束,並且 primary key 約束中的列不能接受空值。由於 primary key 約束可保證資料的唯一性,因此經常對標識列定義這種約束。

如果為表指定了 primary key 約束,則 sql server 2005 資料庫引擎 將通過為主鍵列建立唯一索引來強制資料的唯一性。當在查詢中使用主鍵時,此索引還可用來對資料進行快速訪問。因此,所選的主鍵必須遵守建立唯一索引的規則。

建立主鍵時,資料庫引擎 會自動建立唯一的索引來強制實施 primary key 約束的唯一性要求。如果表中不存在聚集索引或未顯式指定非聚集索引,則將建立唯一的聚集索引以強制實施 primary key 約束。

聚集索引

聚集索引基於資料行的鍵值在表內排序和儲存這些資料行。每個表只能有乙個聚集索引,因為資料行本身只能按乙個順序儲存。

每個表幾乎都對列定義聚集索引來實現下列功能:

可用於經常使用的查詢。 

提供高度唯一性。 

兩者的比較

下面是乙個簡單的比較表

主鍵聚集索引

用途強制表的實體完整性

對資料行的排序,方便查詢用

乙個表多少個

乙個表最多乙個主鍵

乙個表最多乙個聚集索引

是否允許多個欄位來定義

乙個主鍵可以多個欄位來定義

乙個索引可以多個欄位來定義

是否允許 null 資料行出現

如果要建立的資料列中資料存在null,無法建立主鍵。

建立表時指定的 primary key 約束列隱式轉換為 not null。

沒有限制建立聚集索引的列一定必須 not null .

也就是可以列的資料是 null

參看最後一項比較

是否要求資料必須唯一

要求資料必須唯一

資料即可以唯一,也可以不唯一。看你定義這個索引的 unique 設定。

(這一點需要看後面的乙個比較,雖然你的資料列可能不唯一,但是系統會替你產生乙個你看不到的唯一列)

建立的邏輯

資料庫在建立主鍵同時,會自動建立乙個唯一索引。

如果這個表之前沒有聚集索引,同時建立主鍵時候沒有強制指定使用非聚集索引,則建立主鍵時候,同時建立乙個唯一的聚集索引

如果未使用 unique 屬性建立聚集索引,資料庫引擎 將向表自動新增乙個四位元組 uniqueifier 列。

必要時,資料庫引擎 將向行自動新增乙個 uniqueifier 值,使每個鍵唯一。此列和列值供內部使用,使用者不能檢視或訪問。

主鍵和索引的區別

1.主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵.所謂主鍵就是能夠唯一標識表中某一行的屬性或屬性組,乙個表只能有乙個主鍵,但可以有多個候選索引。因為主鍵可以唯一標識某一行記錄,所以可以確保執行數 據更新 刪除的時 候不會出現張冠李戴的錯誤。主鍵除了上述作用外,常常與外來鍵構成參照完整性約束,防止...

主鍵和索引的區別

區別 主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。1 主鍵建立後一定包含乙個唯一性索引,唯一性索引並不一定就是主鍵。2 唯一性索引列允許空值,而主鍵列不允許為空值。3 主鍵列在建立時,已經預設為空值 唯一索引了。4 主鍵可以被其他表引用為外來鍵,而唯一索引不能。5 乙個表最多只能建立乙...

主鍵和索引的區別

1.主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵.所謂主鍵就是能夠唯一標識表中某一行的屬性或屬性組,乙個表只能有乙個主鍵,但可以有多個候選索引。因為主鍵可以唯一標識某一行記錄,所以可以確保執行數 據更新 刪除的時 候不會出現張冠李戴的錯誤。主鍵除了上述作用外,常常與外來鍵構成參照完整性約束,防止...