MySQL外鍵約束的刪除和更新總結(jié)
外鍵約束
外鍵約束的刪除/更新行為
行為 | 說明 |
|---|---|
NO ACTION | 當(dāng)在父表中刪除/更新對應(yīng)記錄時,首先檢查該記錄是否有對應(yīng)外鍵,如果有則不允許刪除/更新。(與RESTRICT一致) |
RESTRICT | 當(dāng)在父表中刪除/更新對應(yīng)記錄時,首先檢查該記錄是否有對應(yīng)外鍵,如果有則不允許刪除/更新。(與NOT ACTION一致) |
CASCADE | 當(dāng)在父表中刪除/更新對應(yīng)記錄時,首先檢查該記錄是否有對應(yīng)外鍵,如果有,則也刪除/更新外鍵在子表總的記錄。 |
SET NULL | 當(dāng)在父表中刪除對應(yīng)記錄時,首先檢查該記錄是否有對應(yīng)外鍵,如果有則設(shè)置該子表中該外鍵值為null(這就要求該外鍵允許取null)。 |
SET DEFAULT | 父表有變更時,子表將外鍵列設(shè)置為一個默認(rèn)的值(innodb不支持) |
alter table 表名 add constraint 外鍵名稱 references 主表名(主表字段名) on update cascade on delete cascade
-- 添加外鍵約束并指定外鍵的刪除和更新行為 alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update cascade on delete cascade ;



將父表dept中的研發(fā)部的id改為6,emp表中的id也會跟著改變

當(dāng)我們刪除父表中id為6,我們可以看到子表emp中存在外鍵關(guān)聯(lián)的數(shù)據(jù)也會被刪除。 說明:如果子表與父表存在外鍵關(guān)聯(lián),刪除父表的數(shù)據(jù)也會影響子表。

演示2:
現(xiàn)在我們先刪除剛剛創(chuàng)建的emp和dept這兩張表,然后重新創(chuàng)建。然后通過命令行進行emp表的外鍵的添加。
-- 添加外鍵約束并指定外鍵的刪除和更新行為 alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update set null on delete set null ;
測試:
刪除dept表中的第一行,然后刷新,我們可以看到emp表中的id為1的數(shù)據(jù)全部置為null了。


通過圖形化界面創(chuàng)建



選中預(yù)修改的表,然后點擊modify table,再點擊foreign keys ,雙擊命令,我們可以在這里修改更新和刪除的規(guī)則,改完以后點擊execute執(zhí)行即可.
總結(jié)

以上就是MySQL外鍵約束的刪除和更新總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于MySQL外鍵約束的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
mysql嚴(yán)格模式Strict?Mode詳細(xì)說明
使用mysql嚴(yán)格模式可以使數(shù)據(jù)更加安全嚴(yán)格,缺點是減少了對空數(shù)據(jù)入庫的兼容性,下面這篇文章主要給大家介紹了關(guān)于mysql嚴(yán)格模式Strict?Mode詳細(xì)說明的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
使用python連接mysql數(shù)據(jù)庫之pymysql模塊的使用
這篇文章主要介紹了使用python連接mysql數(shù)據(jù)庫之pymysql模塊的使用,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09

