最近學習一點資料庫的基本知識,被乙個問題困惑了許久:主鍵是唯一的索引,那麼為何乙個表可以建立多個主鍵呢?
其實「主鍵是唯一的索引」這話有點歧義的。舉個例子,我們在表中建立了乙個id欄位,自動增長,並設為主鍵,這個是沒有問題的,因為「主鍵是唯一的索引」,id自動增長保證了唯一性,所以可以。
此時,我們再建立乙個欄位name,型別為varchar,也設定為主鍵,你會發現,在表的多行中你是可以填寫相同的name值的,這豈不是有違「主鍵是唯一的索引」這句話麼?
所以我才說「主鍵是唯一的索引」是有歧義的。應該是「當表中只有乙個主鍵時,它是唯一的索引;當表中有多個主鍵時,稱為復合主鍵,復合主鍵聯合保證唯一索引」。
為什麼自增長id已經可以作為唯一標識的主鍵,為啥還需要復合主鍵呢。因為,並不是所有的表都要有id這個欄位啊哈哈,比如,我們建乙個學生表,沒有唯一能標識學生的id,怎麼辦呢,學生的名字、年齡、班級都可能重複,無法使用單個欄位來唯一標識,這時,我們可以將多個字段設定為主鍵,形成復合主鍵,這多個字段聯合標識唯一性,其中,某幾個主鍵字段值出現重複是沒有問題的,只要不是有多條記錄的所有主鍵值完全一樣,就不算重複。
資料庫中復合主鍵與聯合主鍵的區別?
復合主鍵 復合主鍵 資料庫表的主鍵由兩個及以上的字段組成。例如 create table asm device config info asmmodel varchar 32 not null comment 自助機型號 devicetype varchar 32 not null comment ...
資料庫中復合主鍵的應用場景
在資料表操作中,使用主鍵來保證資料記錄的唯一性是非常常見的應用,比如以自增長的整型id,或者以身份證號,或者會員號之類的字串型,都是可以的。但是在實際應用中,不可能這麼理想,請下面的例項。現有兩個資料表 材料表 material 和 零件表,結構如下 material 表 m id name pro...
資料庫主鍵方案
1 堅決不可以用某個業務字段做主鍵,理由就不說了,業務都是有意義的,你能保證它產生的規則不變嗎?2 如果要彙總兩個庫表,id很多重複,那為什麼要把a表的資料匯入到b表,為什麼程式不能自己到2個表中去查詢呢,再說了,資料大了還要拆表呢 3 guid作為主鍵,mysql本身並沒有這個資料型別,oracl...