mysql error 1005 can't create table'.\blog\category.frm'

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/

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

相關文章
相關標籤/搜索