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

站在用戶的角度思考問題,與客戶深入溝通,找到黃南州網(wǎng)站設(shè)計與黃南州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計制作、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋黃南州地區(qū)。
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.你試圖引用的其中一個外鍵沒有建立起索引,或者不是一個primary key , 如果其中一個不是primary key 的,你必須為它創(chuàng)建一個索引。
3.外鍵的名字是一個已經(jīng)存在的一個鍵值了,這個時候,你應(yīng)該檢查你的數(shù)據(jù)庫以確保外健名字是***的,或者你在鍵名后面加上幾個隨機的字符以測試是否是這個原因。
4.其中一個或者兩個表是MyISAM引擎的表,若想要使用外鍵約束,必須是InnoDB引擎,(實際上,如果兩個表都是MyISAM 引擎的,這個錯誤根本不會發(fā)生,但也不會產(chǎn)生外鍵),你可以通過查詢?yōu)g覽器來設(shè)置表的引擎類型。
5.你可能設(shè)置了ON DELETE SET NULL, 但是相關(guān)的鍵的字段又設(shè)置成了NOTS NULL 值。你可能通過修改cascade 的屬性值或者把字段屬性設(shè)置成allow null來搞定這個bug.
6.請確定你的Charset 和 Collate 選項在表級和字段級上的一致。
7.你可能設(shè)置為外鍵設(shè)置了一個默認值,如default=0。
8.在這個關(guān)系里面,其中的一個字段是一個混合鍵值中的一個,它沒有自己獨立的索引,這時,你必須為它創(chuàng)建一個獨立的索引。
9.ALTER 聲明中有語法錯誤。
以上就是MySQL創(chuàng)建外鍵失敗時可能原因的總結(jié),如果您想了解更多關(guān)于MySQL數(shù)據(jù)庫的內(nèi)容,可以看一下這里的文章:http://database./mysql/,相信一定可以帶給您收獲的!
【編輯推薦】
- MySQL數(shù)據(jù)庫命令行常用命令大全總結(jié)篇
- MySQL數(shù)據(jù)庫如何實現(xiàn)跨表更新與數(shù)據(jù)并合
- MySQL數(shù)據(jù)庫修改MySQL密碼的六種措施總結(jié)
- MySQL數(shù)據(jù)庫如何刪除表中部分關(guān)鍵字段重復(fù)的記錄
- 如何解決MySQL數(shù)據(jù)庫主從服務(wù)器之間數(shù)據(jù)有差距問題
當前標題:MySQL數(shù)據(jù)庫建立外鍵失敗的原因總結(jié)
鏈接分享:http://m.5511xx.com/article/cosjdeh.html


咨詢
建站咨詢
