程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL數據庫建立外鍵失敗的原因總結

MySQL數據庫建立外鍵失敗的原因總結

編輯:MySQL綜合教程

MySQL數據庫創建外鍵時,經常會發生一些錯誤,這是一件很令人頭疼的事。一個典型的錯誤就是:Can’t create table... 的錯誤。在很多實例中,這種錯誤的發生都是因為mysql一直以來都不能很好的支持的關系的問題, 更不幸的是它也並沒有指明到底是哪一個問題會導致上面那種錯誤,下面我把導致這個可怕的150錯誤的常見原因列出來了,並且我以可能性的大小作了排序,已知的原因: 

1.兩個字段的類型或者大小不嚴格匹配,例如,如果一個是INT(10), 那麼外鍵也必須設置成INT(10), 而不是 INT(11) 也不能是TINYINT. 你得使用SHOW命令來查看字段的大小,因為一些查詢浏覽器有時候把int(10) 和int(11) 都顯示為integer。另外,你還必須確定兩個字段是否一個為SIGNED,而另一個又是UNSIGNED, 這兩字段必須嚴格地一致匹配,更多關於signed 和unsigned的信息,請參閱:http://www.verysimple.com/blog/?p=57 。

2.你試圖引用的其中一個外鍵沒有建立起索引,或者不是一個primary key , 如果其中一個不是primary key 的,你必須為它創建一個索引。 

3.外鍵的名字是一個已經存在的一個鍵值了,這個時候,你應該檢查你的數據庫以確保外健名字是唯一的,或者你在鍵名後面加上幾個隨機的字符以測試是否是這個原因。 

4.其中一個或者兩個表是MyISAM引擎的表,若想要使用外鍵約束,必須是InnoDB引擎,實際上,如果兩個表都是MyISAM 引擎的,這個錯誤根本不會發生,但也不會產生外鍵),你可以通過查詢浏覽器來設置表的引擎類型。

5.你可能設置了ON DELETE SET NULL, 但是相關的鍵的字段又設置成了NOTS NULL 值。你可能通過修改cascade 的屬性值或者把字段屬性設置成allow null來搞定這個bug. 

6.請確定你的Charset 和 Collate 選項在表級和字段級上的一致。

7.你可能設置為外鍵設置了一個默認值,如default=0。

8.在這個關系裡面,其中的一個字段是一個混合鍵值中的一個,它沒有自己獨立的索引,這時,你必須為它創建一個獨立的索引。 

9.ALTER 聲明中有語法錯誤。

以上就是MySQL創建外鍵失敗時可能原因的總結,如果您想了解更多關於MySQL數據庫的內容,可以看一下這裡的文章:http://database.51cto.com/mysql/,相信一定可以帶給您收獲的!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved