在mysql中建立外來鍵時,經常會遇到問題而失敗,這是因為mysql中還有很多細節需要我們去留意,我自己總結並查閱資料後列出了以下幾種常見原因。
1. 兩個欄位的型別或者大小不嚴格匹配。例如,如果乙個是int(10),那麼外來鍵也必須設定成int(10),而不是int(11),也不能是tinyint。另外,你還必須確定兩個字段是否乙個為 signed,而另乙個又是unsigned(即:無符號),這兩欄位必須嚴格地一致匹配,更多關於signed和unsigned的資訊,請參閱:
2. 試圖設定外來鍵的字段沒有建立起索引,或者不是乙個primary key(主鍵)。如果其中乙個不是primary key的話,你必須先為它建立乙個索引。
3. 其中乙個或者兩個表是myisam引擎的表。若想要使用外來鍵約束,表必須是innodb引擎(實際上,如果兩個表都是myisam 引擎的,這個錯誤根本不會發生,但也不會產生外來鍵,只會建立索引)你需要檢查表的引擎型別。
4. 外來鍵的名字不能重複。你應該檢查你的資料庫以確保外健名字是唯一的,或者你在鍵名後面加上幾個隨機的字元以測試是否是這個原因。
5. 你可能設定了on delete set null,但是相關的鍵的字段又設定成了nots null值。你可能通過修改cascade的屬性值或者把字段屬性設定成allow null來解決。
6. 請確定你的charset和collate選項在表級和字段級上的一致。
7. 你可能設定為外來鍵設定了乙個預設值,如default=0。
8. alter宣告中有語法錯誤
當出現錯誤時,仔細檢查資料庫表和字段的設計。我更建議大家盡量使用工具來設計和建立資料庫,這樣能減少出錯的概率。
Mysql無法建立外來鍵的原因
在mysql中建立外來鍵時,經常會遇到問題而失敗,這是因為mysql中還有很多細節需要我們去留意,我自己總結並查閱資料後列出了以下幾種常見原因。兩個欄位的型別或者大小不嚴格匹配。例如,如果乙個是int 10 那麼外來鍵也必須設定成int 10 而不是int 11 也不能是tinyint。另外,你還必...
Mysql無法建立外來鍵的原因 !!!
在mysql中建立外來鍵時,經常會遇到問題而失敗,這是因為mysql中還有很多細節需要我們去留意,我自己總結並查閱資料後列出了以下幾種常見原因。1.兩個欄位的型別或者大小不嚴格匹配。例如,如果乙個是int 10 那麼外來鍵也必須設定成int 10 而不是int 11 也不能是tinyint。另外,你...
Mysql無法建立外來鍵的原因彙總
在mysql中建立外來鍵時,經常會遇到問題而失敗,這是因為mysql中還有很多細節需要我們去留意,我自己總結並查閱資料後列出了以下幾種常見原因。彙總至此以供交流參考.兩個欄位的型別或者大小不嚴格匹配。例如,如果乙個是int 10 那麼外來鍵也必須設定成int 10 而不是int 11 也不能是tin...