mysql之外鍵約束


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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM