MySQL外鍵約束的刪除和更新總結(jié)
外鍵約束
外鍵約束的刪除/更新行為
行為 | 說(shuō)明 |
---|---|
NO ACTION | 當(dāng)在父表中刪除/更新對(duì)應(yīng)記錄時(shí),首先檢查該記錄是否有對(duì)應(yīng)外鍵,如果有則不允許刪除/更新。(與RESTRICT一致) |
RESTRICT | 當(dāng)在父表中刪除/更新對(duì)應(yīng)記錄時(shí),首先檢查該記錄是否有對(duì)應(yīng)外鍵,如果有則不允許刪除/更新。(與NOT ACTION一致) |
CASCADE | 當(dāng)在父表中刪除/更新對(duì)應(yīng)記錄時(shí),首先檢查該記錄是否有對(duì)應(yīng)外鍵,如果有,則也刪除/更新外鍵在子表總的記錄。 |
SET NULL | 當(dāng)在父表中刪除對(duì)應(yīng)記錄時(shí),首先檢查該記錄是否有對(duì)應(yīng)外鍵,如果有則設(shè)置該子表中該外鍵值為null(這就要求該外鍵允許取null)。 |
SET DEFAULT | 父表有變更時(shí),子表將外鍵列設(shè)置為一個(gè)默認(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也會(huì)跟著改變
當(dāng)我們刪除父表中id為6,我們可以看到子表emp中存在外鍵關(guān)聯(lián)的數(shù)據(jù)也會(huì)被刪除。 說(shuō)明:如果子表與父表存在外鍵關(guān)聯(lián),刪除父表的數(shù)據(jù)也會(huì)影響子表。
演示2:
現(xiàn)在我們先刪除剛剛創(chuàng)建的emp和dept這兩張表,然后重新創(chuàng)建。然后通過(guò)命令行進(jìn)行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 ;
測(cè)試:
刪除dept表中的第一行,然后刷新,我們可以看到emp表中的id為1的數(shù)據(jù)全部置為null了。
通過(guò)圖形化界面創(chuàng)建
選中預(yù)修改的表,然后點(diǎn)擊modify table,再點(diǎn)擊foreign keys ,雙擊命令,我們可以在這里修改更新和刪除的規(guī)則,改完以后點(diǎn)擊execute執(zhí)行即可.
總結(jié)
以上就是MySQL外鍵約束的刪除和更新總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于MySQL外鍵約束的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MySQL中表復(fù)制:create table like 與 create table as select
這篇文章主要介紹了MySQL中表復(fù)制:create table like 與 create table as select,需要的朋友可以參考下2014-12-12mysql將數(shù)據(jù)庫(kù)中所有表結(jié)構(gòu)和數(shù)據(jù)導(dǎo)入到另一個(gè)庫(kù)的方法(親測(cè)有效)
這篇文章主要給大家介紹了關(guān)于mysql將數(shù)據(jù)庫(kù)中所有表結(jié)構(gòu)和數(shù)據(jù)導(dǎo)入到另一個(gè)庫(kù)的方法,文中通過(guò)代碼介紹的非常詳細(xì),親測(cè)有效,對(duì)同樣遇到這個(gè)需求的朋友具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01MySQL實(shí)現(xiàn)查詢某個(gè)字段含有字母數(shù)字的值
這篇文章主要介紹了MySQL實(shí)現(xiàn)查詢某個(gè)字段含有字母數(shù)字的值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07mysql-connector-java.jar包的下載過(guò)程詳解
這篇文章主要介紹了mysql-connector-java.jar包的下載過(guò)程詳解,mysql-connector-java.jar是java連接使用MySQL是必不可少的,感興趣的可以了解一下2020-07-07python中的mysql數(shù)據(jù)庫(kù)LIKE操作符詳解
LIKE操作符用于在WHERE子句中搜索列中的指定模式,like操作符的語(yǔ)法在文章開頭也給大家提到,通過(guò)兩種示例代碼給大家介紹python中的mysql數(shù)據(jù)庫(kù)LIKE操作符知識(shí),感興趣的朋友跟隨小編一起看看吧2021-07-07Windows Server 2003下修改MySQL 5.5數(shù)據(jù)庫(kù)data目錄
這篇文章主要介紹了Windows Server 2003下修改MySQL 5.5數(shù)據(jù)庫(kù)data目錄,需要的朋友可以參考下2016-04-04mysql中tonumber函數(shù)使用及注意事項(xiàng)
在MySQL中,沒(méi)有直接的TO_NUMBER函數(shù),但可以通過(guò)CAST或CONVERT實(shí)現(xiàn)字符串到數(shù)字的轉(zhuǎn)換,轉(zhuǎn)換前需明確數(shù)據(jù)類型,了解轉(zhuǎn)換語(yǔ)法,并注意錯(cuò)誤處理、空值處理、格式合規(guī)性和精度問(wèn)題,本文介紹mysql中tonumber函數(shù)使用及注意事項(xiàng),感興趣的朋友一起看看吧2025-02-02