MySQL中利用外鍵實(shí)現(xiàn)級聯(lián)刪除、更新_第1頁
MySQL中利用外鍵實(shí)現(xiàn)級聯(lián)刪除、更新_第2頁
MySQL中利用外鍵實(shí)現(xiàn)級聯(lián)刪除、更新_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、MySQL中利用外鍵實(shí)現(xiàn)級聯(lián)刪除、更新MySQL支持外鍵的存儲引擎只有InnoDB,在創(chuàng)建外鍵的時候,要求父表必須有對應(yīng)的索引,子表在創(chuàng)建外鍵的時候也會自動創(chuàng)建對應(yīng)的索引。在創(chuàng)建索引的時候,可以指定在刪除、更新父表時,對子表進(jìn)行的相應(yīng)操作,包括RESTRICT、NOACTION、SETNULL和CASCADE。其中RESTRICT和NOACTION相同,是指在子表有關(guān)聯(lián)記錄的情況下父表不能更新;CASCADE表示父表在更新或者刪除時,更新或者刪除子表對應(yīng)記錄;SETNULL則是表示父表在更新或者刪除的時候,子表的對應(yīng)字段被SETNULL。因?yàn)橹挥蠭nnoDB引擎才允許使用外鍵,所以,我們的數(shù)據(jù)

2、表必須使用InnoDB引擎。我所使用的版本是Mysql5.1版本的,過程如下:創(chuàng)建數(shù)據(jù)庫:Createdatabasetest;創(chuàng)建兩個表,其中第一個表的ic是第二個表(userinfo)的外鍵:CREATETABLEuser(idint(4)NOTNULL,sexenum(f,m)DEFAULTNULL,PRIMARYKEY(id)ENGINE=InnoDBDEFAULTCHARSET=latin1;CREATETABLEuserinfo(snint(4)NOTNULLAUTO_INCREMENT,useridint(4)NOTNULL,infovarchar(20)DEFAULTNULL,

3、PRIMARYKEY(sn),KEYuserid(userid),CONSTRAINTuserinfo_ibfk_1FOREIGNKEY(userid)REFERENCESuser(id)ONDELETECASCADEONUPDATECASCADE)ENGINE=InnoDBDEFAULTCHARSET=latin1;注意:1、存儲引擎必須使用InnoDB引擎;2、外鍵必須建立索引;3、外鍵綁定關(guān)系這里使用了ONDELETECASCADEONUPDATECASCADE意思是如果外鍵對應(yīng)數(shù)據(jù)被刪除或者更新時,將關(guān)聯(lián)數(shù)據(jù)完全刪除或者相應(yīng)地更新。更多信息請參考MySQL手冊中關(guān)于InnoDB的文檔;

4、好,接著我們再來插入數(shù)據(jù)測試:INSERTINTOuser(id,sex)VALUES(1,f),(2,m),(3,f);INSERTINTOuserinfo(sn,userid,info)VALUES(1,1,2005054dsf),(2,1,fdsfewfdsfds),(3,1,gdsgergergrtre),(4,2,et34t5435435werwe),(5,2,435rtgtrhfghfg),(6,2,ret345tr4345),(7,3,fgbdfvbcbfdgr),(8,3,45r2343234were),(9,3,wfyhtyjtyjyjy);我們先看一下當(dāng)前數(shù)據(jù)表的狀態(tài):my

5、sqlshowtables;|Tables_in_test|user|userinfo|+2rowsinset(0.00sec)User表中的數(shù)據(jù):mysqlselect*fromuser;|id|sex|1|f|2|m|3|f|3rowsinset(0.00sec)Userinfo表中的數(shù)據(jù):mysqlselect*fromuserinfo;|sn|userid|info|1|1|2005054dsf|2|1|fdsfewfdsfds|3|1|gdsgergergrtre|4|2|et34t5435435werwe|5|2|435rtgtrhfghfg|6|2|ret345tr4345|7|

6、3|fgbdfvbcbfdgr|8|3|45r2343234were|9|3|wfyhtyjtyjyjy|9rowsinset(0.00sec)對于建立以上不表,相信對大家也沒什么難度了。好的,下面我們就要試驗(yàn)我們的級聯(lián)刪除功能了。我們將刪除user表中id為2的數(shù)據(jù)記錄,看看userinf表中userid為2的相關(guān)子紀(jì)錄是否會自動刪除:執(zhí)行刪除操作成功!mysqldeletefromuserwhereid=2;QueryOK,1rowaffected(0.03sec)看看user表中已經(jīng)沒有id為2的數(shù)據(jù)記錄了!mysqlselect*fromuser;|id|sex|1|f|3|f|2ro

7、wsinset(0.00sec)再看看userinfo表中已經(jīng)沒有userid為2的3條數(shù)據(jù)記錄了,對應(yīng)數(shù)據(jù)確實(shí)自動刪除了!mysqlselect*fromuserinfo;|sn|userid|info|1|1|2005054dsf|2|1|fdsfewfdsfds|3|1|gdsgergergrtre|7|3|fgbdfvbcbfdgr|8|3|45r2343234were|9|3|wfyhtyjtyjyjy|6rowsinset(0.00sec)更新的操作也類似,因?yàn)槲覀冊谇懊娼ū淼臅r候已經(jīng)定義外鍵刪除、更新操作都是CASCADE,所以在這里可以直接測試數(shù)據(jù)。將user表中原來id為1的數(shù)據(jù)記錄更改為id為4,執(zhí)行如下:mysqlupdateusersetid=4whereid=1;QueryOK,1rowaffected(0.03sec)Rowsmatched:1Changed:1Warnings:0現(xiàn)在去看看兩個表中是數(shù)據(jù)是否發(fā)生了變化:mysqlselect*fromuser;|id|sex|3|f|4|f|2rowsinset(0.00sec)mysqlselect*fromuserinfo;|sn|userid|info|1|4|2005054dsf|2|4|fdsfewfdsfds|3|4|gdsgergergrtre|7|3|fgbdfvbcbfdg

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論