mysql 建立外鍵錯誤(mysql error number 1005 errno: 150)

來源:互聯網
上載者:User
源自:http://yin123.blog.51cto.com/882581/533192 This is a very common error when create a mysql table , even some people has take it as a mysql bug and commit it to the official , I came up with this bothered problem these days also, after a crazy Google work, the source of the problem became clear , the following lines is a very good article that give that "bug" a conclusion , and I'd like to translate it into simple Chinese in case you'll hit that problem again ,

Concerning the personal talent, some mistakes can not be avoid , if you
found any, please feel free to contact me , or leave a message below,
thanks in advance.
source url :

http://www.verysimple.com/blog/2006/10/22/mysql-error-number-1005-cant-create-table-mydbsql-328_45frm-errno-150/

Translation text :

當你試圖在mysql中建立一個外鍵的時候,這個出錯會經常發生,這是非常令人沮喪的。像這種不能建立一個.frm
檔案的報錯好像暗示著作業系統的檔案的許可權錯誤或者其它原因,但實際上,這些都不是的,事實上,這個mysql報錯已經被報告是一個mysql本身的
bug並出現在mysql 開發人員列表當中很多年了,然而這似乎又是一種誤導。

在很多執行個體中,這種錯誤的發生都是因為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 聲明中有語法錯誤

黑色頭髮:http://heisetoufa.javaeye.com/

今天遇到這個問題了,在網上查了一下,特此做個記錄

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.