1. 程式人生 > 實用技巧 >MySQL外來鍵(foreign key)使用及說明詳解

MySQL外來鍵(foreign key)使用及說明詳解

外來鍵也稱之為外來鍵約束: foreign key

外來鍵: 外面的鍵, 一張表的一個欄位(非主鍵)指向另外一個表的主鍵, 那麼該欄位就稱之為外來鍵.

外來鍵所在的表稱之為子表(附表); 外來鍵所指向的主鍵所在的表稱之為父表(主表)

一、增加外來鍵
將一個表的欄位與另外一張表的主鍵進行關聯(實體與實體之間的聯絡)

增加外來鍵有兩種形式

方案1: 在建立表的時候就增加外來鍵: 在表字段之後使用foreign key

foreign key(外來鍵欄位) references 主表(主鍵);

在這裡插入圖片描述
在這裡插入圖片描述
方案2: 在建立表之後增加外來鍵: 指定外來鍵名字

alter table 表名 add constraint 外來鍵名 foreign key(外來鍵欄位) references 父表(主鍵欄位)

在這裡插入圖片描述
檢視指定的外來鍵名
在這裡插入圖片描述
外來鍵增加的基礎條件: 外來鍵欄位必須與引用表(父表主鍵)的資料型別嚴格保持一致在這裡插入圖片描述
二、刪除外來鍵
外來鍵不能被修改,只能先刪除後新增.
alter table 表名 drop foreign key 外來鍵名;
在這裡插入圖片描述
三、外來鍵作用
外來鍵也稱之為外來鍵約束: 主要作用在於對資料進行約束.

約束1: 外來鍵對子表的資料寫操作約束: (增加和更新): 如果子表中插入的資料所對應的外來鍵在父表不存在: 不能成功.
在這裡插入圖片描述
約束2: 外來鍵對父表也有資料約束: 當父表操作一個記錄,但是該記錄被子表所引用的時候,那麼父表的操作將會被限制(更新: 主鍵和刪除)
在這裡插入圖片描述
四、外來鍵約束
外來鍵約束: 可以通過在建立外來鍵的時候, 對外來鍵進行約束控制.

約束控制有三種模式

嚴格模式: district(預設的)
置空模式: set null,對子表的限制: 當父表刪除一個被子表引用的記錄的時候,會自動的將子表中對應的父表引用(外來鍵)設定成NULL
級聯模式: cascade, 級聯操作: 當父表對一個被子表引用的資料進行操作的時候,會自動的連帶更新子表對應的資料.(更新操作)
模式設定語法: 在外來鍵增加之後(foreign key(外來鍵欄位) references 父表(主鍵)),增加on關鍵字, 指定操作方式和約束模式. 一個常用的約束模式如下
on update cascade – 級聯操作: 父表更新,子表跟著變
on delete set null; – 父表刪除, 子表置空

在這裡插入圖片描述
更新父表主鍵在這裡插入圖片描述
刪除父表記錄在這裡插入圖片描述
外來鍵要增加成功的前提條件

子表的外來鍵欄位的資料型別必須與父表的主鍵的欄位型別要一致
如果想要在父表進行資料刪除的時候, 子表對應的模式為置空: set null,前提是子表對應的外來鍵欄位允許為空
如果是在表建立之後增加外來鍵: 一定要考慮表中的資料是否滿足外來鍵條件