1. 程式人生 > >主鍵和索引的區別

主鍵和索引的區別

存在 這一 需要 實體完整性 主鍵 可能 數據庫 創建表 但是

主鍵(PRIMARY KEY)

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

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

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

創建主鍵時,數據庫引擎會自動創建唯一的索引來強制實施PK約束的唯一性要求。如果表中不存在狙擊索引或未顯示指定非聚集索引,則將創建唯一的聚集索引以強制實施PK約束。

聚集索引

聚集索引給予數據行的兼職在表內排序和存儲這些數據行。每個表只能有一個聚集索引,因為數據行本身只能按一個順序存儲。

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

可用於經常使用的查詢。

提供高度唯一性。

兩者的比較

主鍵 聚集索引
用途 強制表的實體完整性 對數據行的排序,方便查詢用
一個表多少個 一個表最多一個主鍵 一個表最多一個聚集索引
是否允許多個字段來定義 一個主鍵可以多個字段來定義 一個索引可以多個字段來定義
是否允許null值 如果要創建的數據列中數據存在null,無法創建主鍵,創建表時指定的PK約束列隱式轉換為Not null 沒有限制建立聚集索引的列一定必須Not null。也就是說可以獵德數據時null參看最後一項比較
是否要求數據必須唯一 要求數據必須唯一 數據既可以唯一,也可以不唯一。看你定義這個索引的UNIQUE設置。(這一點需要看後面的一個比較,雖然你的數據列可能不唯一,但是系統會替你產生一個你看不到的唯一列。)
創建的邏輯 數據庫在創建主鍵同時,會自動建立一個唯一索引。如果這個表之前沒有聚集索引,同時建立主鍵時候沒有強制指定使用非聚集索引,則同時建立一個唯一的狙擊索引 如果未使用UNIQUE屬性創建聚集索引,數據庫引擎將向表自動添加一個死自己uniqueifier列。必要時,數據庫引擎將向行自動添加一個uniqueifier值,使每個鍵唯一。此列和列值供內部使用,用戶不能查看或訪問。

主鍵和索引的區別