在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 1215錯誤 外來鍵建立失敗
在mysql中建立資料表時,經常會遇到問題而失敗,其中建立外來鍵有很多細節需要我們去留意,主要有以下幾種常見原因。1.兩個欄位的型別或者大小不嚴格匹配。例如,如果乙個是int 10 那麼外來鍵也必須設定成int 10 而不是int 11 也不能是tinyint。另外,你還必須確定兩個字段是否都為si...
mysql建立外來鍵
建立外來鍵的前提 本表的列必須與外來鍵型別相同 外來鍵必須是外表主鍵 外來鍵作用 使兩張表形成關聯,外來鍵只能引用外表中的列的值!指定主鍵關鍵字 foyunmkreign key 列名 引用外來鍵關鍵字 references 外來鍵表名 外來鍵列名 事件觸發限制 on delete和on updat...
mysql建立外來鍵案例 MySQL外來鍵例項
外來鍵例項 性別表create table gender gid int auto increment primary key not null,gender char 10 insert into gender gender values male female unknown 乙個表只能有乙個主...