共計 946 個字符,預(yù)計需要花費 3 分鐘才能閱讀完成。
今天就跟大家聊聊有關(guān) MySQL 數(shù)據(jù)庫中建立外鍵失敗的原因有哪些,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
MySQL 數(shù)據(jù)庫建立外鍵失敗的原因有哪些
1. 兩個字段的類型或者大小不嚴格匹配,例如,如果一個是 INT(10), 那么外鍵也必須設(shè)置成 INT(10), 而不是 INT(11) 也不能是 TINYINT. 你得使用 SHOW 命令來查看字段的大小,因為一些查詢?yōu)g覽器有時候把 int(10) 和 int(11) 都顯示為 integer。另外,你還必須確定兩個字段是否一個為 SIGNED, 而另一個又是 UNSIGNED, 這兩字段必須嚴格地一致匹配,更多關(guān)于 signed 和 unsigned 的信息,請參閱:http://www.verysimple.com/blog/p=57。
2. 你試圖引用的其中一個外鍵沒有建立起索引,或者不是一個 primarykey, 如果其中一個不是 primarykey 的,你必須為它創(chuàng)建一個索引。
3. 外鍵的名字是一個已經(jīng)存在的一個鍵值了,這個時候,你應(yīng)該檢查你的數(shù)據(jù)庫以確保外健名字是唯一的,或者你在鍵名后面加上幾個隨機的字符以測試是否是這個原因。
4. 其中一個或者兩個表是 MyISAM 引擎的表,若想要使用外鍵約束,必須是 InnoDB 引擎,(實際上,如果兩個表都是 MyISAM 引擎的,這個錯誤根本不會發(fā)生,但也不會產(chǎn)生外鍵),你可以通過查詢?yōu)g覽器來設(shè)置表的引擎類型。
MySQL 數(shù)據(jù)庫建立外鍵失敗的原因有哪些
5. 你可能設(shè)置了 ONDELETESETNULL, 但是相關(guān)的鍵的字段又設(shè)置成了 NOTSNULL 值。你可能通過修改 cascade 的屬性值或者把字段屬性設(shè)置成 allownull 來搞定這個 bug.
6. 請確定你的 Charset 和 Collate 選項在表級和字段級上的一致。
7. 你可能設(shè)置為外鍵設(shè)置了一個默認值,如 default=0。
8. 在這個關(guān)系里面,其中的一個字段是一個混合鍵值中的一個,它沒有自己獨立的索引,這時,你必須為它創(chuàng)建一個獨立的索引。
9.ALTER 聲明中有語法錯誤。
看完上述內(nèi)容,你們對 MySQL 數(shù)據(jù)庫中建立外鍵失敗的原因有哪些有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。