小編給大家分享一下Navicat如何添加外鍵,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
為博望等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及博望網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、博望網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!正文
想要建立class表與student表之間的外鍵連接,class為父表,student為子表
打開student的設(shè)計(jì)表。
如果c_id不允許為空則當(dāng),選擇刪除時(shí)-->>SET NULL就會出現(xiàn)Cannot add foreign key constraint的提示,這是因?yàn)閯h除置空有條件,必須滿足字段允許為空(如果不滿足,外鍵無法創(chuàng)建)當(dāng)然,如果不允許為空,可以選擇刪除時(shí)-->>CASCADE也可以建立外鍵。
當(dāng)勾選允許為空之后
再去保存就可以了。
還有必須注意,Engin必須為InnoDB。
總結(jié)一下:
外鍵條件
在我們使用外鍵的時(shí)候,應(yīng)該遵循如下條件:
外鍵要存在,首先必須保證表的引擎是 InnoDB(默認(rèn)的存儲引擎),如果不是 InnoDB 存儲引擎,那么外鍵可以創(chuàng)建成功,但沒有約束作用;
外鍵字段的字段類型(列類型),必須與父表的主鍵類型完全一致;
每張表中的外鍵名稱不能重復(fù);
增加外鍵的字段,如果數(shù)據(jù)已經(jīng)存在,那么要保證數(shù)據(jù)與父表中的主鍵對應(yīng)。
如果外鍵約束模式選擇SET NULL ,那么字段必須允許為NULL,否則出現(xiàn)Cannot add foreign key constraint。
外鍵約束
所謂外鍵約束,就是指外鍵的作用。之前所講的外鍵的作用都是默認(rèn)的作用,實(shí)際上,可以通過對外鍵的需求,進(jìn)行定制操作。
外鍵約束有三種模式,分別為:
district
:嚴(yán)格模式(默認(rèn)),父表不能刪除或更新一個(gè)已經(jīng)被子表數(shù)據(jù)引用的記錄;
cascade
:級聯(lián)模式,父表的操作,對應(yīng)子表關(guān)聯(lián)的數(shù)據(jù)也跟著被刪除;
set null
:置空模式,父表的操作之后,子表對應(yīng)的數(shù)據(jù)(外鍵字段)被置空。
設(shè)計(jì)外鍵的界面,有七列:
名(name):可以不填,保存時(shí)會自動生成。
欄位(FieldName):要設(shè)置的外鍵,如:student 里的c_id
參考數(shù)據(jù)庫(Reference DataBase):外鍵關(guān)聯(lián)的數(shù)據(jù)庫
被參考表(Reference Table):關(guān)聯(lián)的表,這里是class表
參考欄位(Forgin filed Names):關(guān)聯(lián)的字段,class里的id
刪除時(shí)(ondelete):刪除時(shí)候的動作,當(dāng)時(shí)我選擇的是SETNULL
更新時(shí)(onupdate):更新時(shí)候的動作,我選擇的是CASCADE
以上字段也可以按照自己的需求填寫,設(shè)置完成后保存即可。
某個(gè)表已經(jīng)有記錄了,添加外鍵失敗,這時(shí)候只需要將兩個(gè)要關(guān)聯(lián)的表中的數(shù)據(jù)清空再從新添加外鍵關(guān)系即可。
看完了這篇文章,相信你對“Navicat如何添加外鍵”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!