1.什么是外鍵
A表的主鍵,在B表中字段出現,就是外鍵。
2.什么是約束:約束是一種限制,它通過對表的行貨列的數據做出限制,來確保表的數據的完整性、唯一性。比如人員表中有一列是部門id,當新增一個人員的時候,我們不需要手動的在部門id字段給這個人員設置一個部門,而是新增則個新人員記錄的時候默認就會有一個部門id給了這個人員,這就是約束。
3.以上1和2結合一起就是外鍵約束。即:foreign key
4.具體操作
4.1創建表時,同時創建外鍵約束
4.2已創建表后,追加外鍵約束
(1)添加外鍵方法
-- CONSTRAINT 就是創建外鍵約束 fk_id是外鍵約束的名字 -- foreign key (dept_id) references dept(did)意思是設置person表中的dept_id字段和dept表中的did字段關聯,dept表中的did字段就是person表中的dept_id的外鍵約束,這個外鍵約束的名字叫做fk_id,一般潛規則外鍵約束的名字開頭是fk_ alter table person add CONSTRAINT fk_id foreign key (dept_id) REFERENCES dept(did);
此時可以發現在person表中的,點擊外鍵按鈕,可以看到創建出來的外鍵
欄位表示的是person表中的dept_id字段,參考欄位的did就是person表中的dept_id字段的約束,dept_id字段的值被約束為dept字段did字段的值
主表就是外鍵約束有約束值的那個表
從表就是被約束的那個表
(2)外鍵約束的4種類型,RESTRICT、NO ACTION、CASCADE、SET NULL主要針對於外鍵里的刪除時和更新時
RESTRICT(約束):如果出現在刪除時,意思是約束外鍵主鍵did記錄(主表中的記錄)不能直接刪除,必須先刪除被約束的表(從表)字段中dept_id所有這個外鍵主鍵值對應的記錄,才能刪除外鍵約束(主表中的記錄)
NO ACTION:
CASCADE:刪除選擇這個時,刪除主表中的記錄時,主表中的這個主鍵id關聯的從表的這個id值所在的記錄也會被刪除。建議不選。
SET NULL :刪除選擇這個時,如果從表(被約束的字段所在的表中)被約束的字段的值設置為可以為空時,那么當刪除主表的記錄時,主表中被刪除的這個記錄對應的主鍵值(約束從表字段的那個值)在從表中對應的字段中出現的那個記錄的被約束字段的值就會變為NULL。
最常用的是選擇RESTRICT不讓刪的這個約束、或者選擇SET NULL刪除后值表為空。
目前公司都不太喜歡使用這種真實的外鍵約束,而是使用虛擬的外鍵約束。虛擬外鍵約束:就是人員表中的部門id字段中的id值是部門表中的主鍵id的值,這就是虛擬外鍵約束,也是目前來說比較流行使用的。
(3)刪除外鍵
-- 刪除外鍵約束 alter table person DROP foreign key fk_id;
5.其他約束類型
-- 向t5表中插入兩條記錄,第二值用的都是默認值,如果是默認值則可以不填或填default insert into t5 values(3, DEFAULT), (4, DEFAULT);