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