前言
用Navicat為mysql數(shù)據(jù)庫的兩個表之間建立外鍵關(guān)系,出現(xiàn)“cannot add foreign key constraint”錯誤,操作了很久不知道怎么回事,發(fā)現(xiàn)竟然是。。。。
正文
想要建立class表與student表之間的外鍵連接,class為父表,student為子表


打開student的設(shè)計表。


如果c_id不允許為空則當,選擇刪除時-->>SET NULL就會出現(xiàn)Cannot add foreign key constraint的提示,這是因為刪除置空有條件,必須滿足字段允許為空(如果不滿足,外鍵無法創(chuàng)建)當然,如果不允許為空,可以選擇刪除時-->>CASCADE也可以建立外鍵。

當勾選允許為空之后

再去保存就可以了。
還有必須注意,Engin必須為InnoDB。

總結(jié)一下:
外鍵條件
在我們使用外鍵的時候,應(yīng)該遵循如下條件:
- 外鍵要存在,首先必須保證表的引擎是 InnoDB(默認的存儲引擎),如果不是 InnoDB 存儲引擎,那么外鍵可以創(chuàng)建成功,但沒有約束作用;
- 外鍵字段的字段類型(列類型),必須與父表的主鍵類型完全一致;
- 每張表中的外鍵名稱不能重復(fù);
- 增加外鍵的字段,如果數(shù)據(jù)已經(jīng)存在,那么要保證數(shù)據(jù)與父表中的主鍵對應(yīng)。
- 如果外鍵約束模式選擇SET NULL ,那么字段必須允許為NULL,否則出現(xiàn)Cannot add foreign key constraint。
外鍵約束
所謂外鍵約束,就是指外鍵的作用。之前所講的外鍵的作用都是默認的作用,實際上,可以通過對外鍵的需求,進行定制操作。
外鍵約束有三種模式,分別為:
district
:嚴格模式(默認),父表不能刪除或更新一個已經(jīng)被子表數(shù)據(jù)引用的記錄;
cascade
:級聯(lián)模式,父表的操作,對應(yīng)子表關(guān)聯(lián)的數(shù)據(jù)也跟著被刪除;
set null
:置空模式,父表的操作之后,子表對應(yīng)的數(shù)據(jù)(外鍵字段)被置空。
設(shè)計外鍵的界面,有七列:
- 名(name):可以不填,保存時會自動生成。
- 欄位(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
- 刪除時(ondelete):刪除時候的動作,當時我選擇的是SETNULL
- 更新時(onupdate):更新時候的動作,我選擇的是CASCADE
以上字段也可以按照自己的需求填寫,設(shè)置完成后保存即可。
某個表已經(jīng)有記錄了,添加外鍵失敗,這時候只需要將兩個要關(guān)聯(lián)的表中的數(shù)據(jù)清空再從新添加外鍵關(guān)系即可。
到此這篇關(guān)于Navicat添加外鍵詳細操作步驟的文章就介紹到這了,更多相關(guān)Navicat添加外鍵內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- navicat無法遠程連接mysql的解決方法
- 使用navicat 8實現(xiàn)創(chuàng)建數(shù)據(jù)庫和導(dǎo)入數(shù)據(jù) 管理用戶與權(quán)限[圖文方法]
- Navicat查詢結(jié)果不能修改的原因及解決方法
- navicat連接mysql出現(xiàn)2059錯誤的解決方法
- MySQL數(shù)據(jù)庫安裝和Navicat for MySQL配合使用教程