聯合主鍵 復合主鍵
其實「主鍵是唯一的索引」這話有點歧義的。舉個例子,我們在表中建立了乙個id欄位,自動增長,並設為主鍵,這個是沒有問題的,因為「主鍵是唯一的索引」,id自動增長保證了唯一性,所以可以。
此時,我們再建立乙個欄位name,型別為varchar,也設定為主鍵,你會發現,在表的多行中你是可以填寫相同的name值的,這豈不是有違「主鍵是唯一的索引」這句話麼?
所以我才說「主鍵是唯一的索引」是有歧義的。(復合主鍵)應該是「當表中只有乙個主鍵時,它是唯一的索引;當表中有多個主鍵時,稱為復合主鍵,復合主鍵聯合保證唯一索引」。
為什麼自增長id已經可以作為唯一標識的主鍵,為啥還需要復合主鍵呢。因為,並不是所有的表都要有id這個欄位啊哈哈,比如,我們建乙個學生表,沒有唯一能標識學生的id,怎麼辦呢,學生的名字、年齡、班級都可能重複,無法使用單個欄位來唯一標識,這時,我們可以將多個字段設定為主鍵,形成復合主鍵,這多個字段聯合標識唯一性,其中,某幾個主鍵字段值出現重複是沒有問題的,只要不是有多條記錄的所有主鍵值完全一樣,就不算重複。
什麼是資料表的復合主鍵
所謂的復合主鍵 就是指你表的主鍵含有乙個以上的字段組成
比如create table test
(name varchar(19),
id number,
value varchar(10),
primary key (name,id)
)上面的name和id欄位組合起來就是你test表的復合主鍵
它的出現是因為你的name欄位可能會出現重名,所以要加上id欄位這樣就可以保證你記錄的唯一性
一般情況下,
主鍵的字段長度和字段數目要越少越好
聯合主鍵
什麼是聯合主鍵?
(主鍵原則上是唯一的,別被唯一值所困擾。)
顧名思義就是多個主鍵
聯合形成乙個主鍵組合
乙個簡單的例子
主鍵a跟主鍵b組成聯合主鍵
主鍵a跟主鍵b的資料可以完全相同(困擾吧,沒關係),聯合就在於主鍵a跟主鍵b形成的聯合主鍵是唯一的。
下例主鍵a資料是1,主鍵b資料也是1,聯合主鍵其實是11,這個11是唯一值,絕對不充許再出現11這個唯一值。(
這就是多對多關係)
主鍵a資料主鍵b資料
1 1
2 2
3 3
主鍵a與主鍵b的聯合主鍵值最多也就是
1112
1321
2223
3132
33
聯合主鍵和復合主鍵
聯合主鍵其實就是中間表。在多對多模型裡,需要兩個表中的主鍵組成聯合主鍵,這樣就可以查到兩個表中的每個資料。建立team表 create table team id mediumint auto increment comment team 主鍵 name varchar 10 comment tea...
聯合主鍵和復合主鍵區別
什麼是資料表的復合主鍵 所謂的復合主鍵 就是指你表的主鍵含有乙個以上的字段組成 比如 create table test name varchar 19 id number,value varchar 10 primary key name,id 上面的name和id欄位組合起來就是你test表的復...
聯合主鍵和復合主鍵區別
什麼是資料表的復合主鍵 所謂的復合主鍵 就是指你表的主鍵含有乙個以上的字段組成 比如 create table test name varchar 19 id number,value varchar 10 primary key name,id 上面的name和id欄位組合起來就是你test表的復...