Navicat建立外來鍵失敗原因總結
前言:
用Navicat為mysql資料庫的兩個表之間建立外來鍵關係,出現“cannot add foreign key constraint”錯誤,當時真的不知道是怎麼回事兒,~~~~(>_<)~~~~,不過,說到這兒,先談談外來鍵的建立吧。
外來鍵建立:
把表t_stuschoolregisterinfo的IDCard欄位設成外來鍵,關聯表t_stupersoninfo的IDCard欄位。
開啟Navicat找到t_stuschoolregisterinfo表,選中它,點選上面的設計表。
然後在點選“外來鍵”,如下圖。
設計外來鍵的介面,有七列:
名(name):可以不填,儲存時會自動生成。
欄位(FieldName):要設定的外來鍵,如:t_stuschoolregisterinfo 裡的IDCard
參考資料庫(Reference DataBase):外來鍵關聯的資料庫
被參考表(Reference Table):關聯的表,這裡是t_stupersoninfo表
參考欄位(Forgin filed Names):關聯的欄位,t_stupersoninfo裡的IDCard
刪除時(ondelete):刪除時候的動作,當時我選擇的是SETNULL
更新時(onupdate):更新時候的動作,我選擇的是CASCADE
以上欄位也可以按照自己的需求填寫,設定完成後儲存即可。
問題:
當我儲存時提示錯誤“cannot add foreign key constraint”,不能成功建立外來鍵約束。從網上搜了很多,主要有一下幾種情況吧:
1)要關聯的欄位型別或長度不一致。
2)兩個要關聯的表編碼不一樣。
3)某個表已經有記錄了。
4)將“刪除時”和“更新時”都設定相同,如都設定成CASCADE。
我從第一種情況開始檢查,最後是通過第四個方法解決的問題,儘管解決後感覺並不難,但當時真的有點迷惑,整個搜尋尋找解決辦法的過程是很有收穫的。
補充:
在設定外來鍵的過程中也遇到了下面的問題。
原因:
某個表已經有記錄了,新增外來鍵失敗,這時候只需要將兩個要關聯的表中的資料清空再從新新增外來鍵關係即可。
總結:
通過用藉助Navicat對mysql的學習從中收穫到了很多,也遇到了不少的問題,但我覺的這正是一個成長的過程,遇到的問題無論大小,解決了自己就成長了,還是很值的的,感觸很深,多多實踐吧,相信你也會收穫很多。
原文連結:http://blog.csdn.net/ytm15732625529/article/details/53729155