mysql中設置外鍵約束及主表從表的關系


1.新建外鍵代碼

 alter table stu5 add constraint 編號 foreign key (bh) references stu2 (bh) on delete restrict on update restrict;

說明:

stu2和stu5是兩張表,“編號”為字段bh的約束名(是stu5表中的一個屬性),bh是stu2表中的主鍵,而bh並不是stu5的主鍵,那么則稱stu2為主表,stu5為從表。

注意:

1.新建外鍵,子表外鍵字段列值必須是父表引用列值的子集【值都不能包含怎么做引用列?】。
2.引用列字段必須是索引或主鍵或聯合主鍵(索引值或聯合主鍵值可重復,唯一主鍵不能重復)【不做索引怎么關聯?】

2.刪除和更新有四種設置方式

(1)cascade:級聯,當父表更新、刪除,子表所有同值記錄會同步更新和刪除【修改子表,必須保證修改后B表外鍵字段的值依然能在A表中找到,否則會報錯。】(2)set null:置空,當父表更新、刪除的時候,字表會把外鍵字段變為null,所以這個時候設計表的時候該字段要允許為null,否則會出錯
(3)restrict:父表在刪除和更新記錄的時候,要在子表中檢查是否有有關該父表要更新和刪除的記錄,如果有,則不允許刪除個更改
(4)no action:和restrict一樣

(5)SET DEFAULT 指定如果試圖刪除某一行,而該行的鍵被其他表的現有行中的外鍵所引用,則組成被引用行中的外鍵的所有值將被設置為它們的默認值。目標表的所有外鍵列必須具有默認值定義,此約束才可執行。如果某個列可為空值,並且未設置顯式的默認值,則會使用 NULL 作為該列的隱式默認值。因 ON DELETE SET DEFAULT 而設置的任何非空值在主表中必須有對應的值,才能維護外鍵約束的有效性。
————————————————
版權聲明:本文為CSDN博主「瘦不下來的吳彥祖」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zzy296753977/article/details/80848613

 

在MySQL中,如果兩個表存在主外關系,則有五種引用操作,分別是 cascade、no action、restrict、set null和set default,有很多人對no action的restrict區別搞不清楚,其實在MySQL中是一樣的,原因如下:restrict是在修改或者刪除之前去檢查從表中是否有對應的數據,如果有,拒絕操作,而no action是來源標准的sql,在有些數據庫中,會延遲檢查,即在修改或者刪除完以后去檢查從表中是否有對應的數據,如果有,拒絕操作,但是在MySQL中,外鍵約束都會立即檢查,所以兩者等價。需要注意的是,set default只是MySQL 解析器認可,但是InnoDB和NDB 拒絕在定義表時,出現ON DELETE SET DEFAULT or ON UPDATE SET DEFAULT 語句。


————————————————
版權聲明:本文為CSDN博主「Infen」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/infen/article/details/84009724


————————————————
版權聲明:本文為CSDN博主「fullStackChenZF」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/fullStackChenZF/article/details/78031192

刪除外鍵命令: alter table 表名 drop foreign key 外鍵約束名稱 //刪除外鍵
alter table stu2 drop foreign key 編號  //實例


 


免責聲明!

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



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