1. 程式人生 > >MySQL 複合主鍵(Day02)

MySQL 複合主鍵(Day02)

主鍵約束

主鍵約束是表中的某一列,也可以是表中多個列所構成的一個組合,其中有多一個列組合而成的主鍵稱為複合主鍵

在MsSQL中,主鍵列必須遵循以下規則:

1.每個表只能定義一個主鍵

2.唯一性原則,主鍵的值也成只為鍵值,必須能夠唯一標識表中的每一條記錄,且不能為NULL,也就是說一張表中兩個不同的行

在主鍵上不能有相同的值。

3.最小化規則.複合主鍵不能包含不必要的多餘列,也就是說,當從一個複合主鍵中刪除一列後,如果剩下的列構成的主鍵仍能夠滿足唯一性原則,那麼這個複合主鍵是不正確的。

4.一個列明在符合主鍵中只能出現一次。

有多一個列組合而成的主鍵稱為複合主鍵

複合主鍵

什麼是主鍵約束:(

在一個數據表中通過多個欄位作為主鍵來確定一條記錄,那麼,多個欄位組成的就是複合主鍵 )

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

(下文摘選自-作者:beautifulsarah ,應博主要求,轉載請註明出處 來源:CSDN  原文:https://blog.csdn.net/beautifulsarah/article/details/53502109?utm_source=copy )

所謂的複合主鍵 就是指你表的主鍵含有一個以上的欄位組成  比如  create table test  (     name varchar(19),     id number,     value varchar(10),     primary key (name,id)  )

上面的name和id欄位組合起來就是你test表的複合主鍵  它的出現是因為你的name欄位可能會出現重名,所以要加上ID欄位這樣就可以保證你記錄的唯一性  一般情況下,主鍵的欄位長度和欄位數目要越少越好 --------------------- 

為什麼要使用主鍵約束:

(以下內容摘選自-作者:南極娃娃魚 )應博主要求,轉載請註明出處

------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 來源:CSDN  原文:https://blog.csdn.net/wangyuchun_799/article/details/49329649?utm_source=copy  版權宣告:本文為博主原創文章,轉載請附上博文連結!

最近學習一點資料庫的基本知識,被一個問題困惑了許久:主鍵是唯一的索引,那麼為何一個表可以建立多個主鍵呢?

其實“主鍵是唯一的索引”這話有點歧義的。舉個例子,我們在表中建立了一個ID欄位,自動增長,並設為主鍵,這個是沒有問題的,因為“主鍵是唯一的索引”,ID自動增長保證了唯一性,所以可以。

此時,我們再建立一個欄位name,型別為varchar,也設定為主鍵,你會發現,在表的多行中你是可以填寫相同的name值的,這豈不是有違“主鍵是唯一的索引”這句話麼?

所以我才說“主鍵是唯一的索引”是有歧義的。應該是“當表中只有一個主鍵時,它是唯一的索引;當表中有多個主鍵時,稱為複合主鍵,複合主鍵聯合保證唯一索引”。

為什麼自增長ID已經可以作為唯一標識的主鍵,為啥還需要複合主鍵呢。因為,並不是所有的表都要有ID這個欄位啊哈哈,比如,我們建一個學生表,沒有唯一能標識學生的ID,怎麼辦呢,學生的名字、年齡、班級都可能重複,無法使用單個欄位來唯一標識,這時,我們可以將多個欄位設定為主鍵,形成複合主鍵,這多個欄位聯合標識唯一性,其中,某幾個主鍵欄位值出現重複是沒有問題的,只要不是有多條記錄的所有主鍵值完全一樣,就不算重複。 --------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------

建立主鍵約束有兩種方法:

1.create table tb_user(

id int auto_increment primary key,

user varchar (30)  not null,

createtime daretime);

方法二:

create table tb_student(

id int auto_increment,

name varchar(30) not null,

sex varchar(2),

classid int not null,

birthday date,

PRIMARY KEY(id,classid)

);

如果表中僅由表中的某一列所構成,那麼以上兩種方法均可定義主鍵約束,如果主鍵有表中多個列所構成,那麼只能用第二種方法來定義主鍵約束,另外,定義主鍵約束後,MySQL會自動為主鍵建立一個唯一索引,預設名為primary,也可以修改其他的名字。