最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MYSQL建立外鍵失敗幾種情況記錄Can't create table不能創(chuàng)建表

 更新時(shí)間:2011年08月07日 11:40:15   作者:  
當(dāng)你試圖在mysql中創(chuàng)建一個(gè)外鍵的時(shí)候,這個(gè)出錯(cuò)會經(jīng)常發(fā)生,這是非常令人沮喪的。
像這種不能創(chuàng)建一個(gè).frm 文件的報(bào)錯(cuò)好像暗示著操作系統(tǒng)的文件的權(quán)限錯(cuò)誤或者其它原因,但實(shí)際上,這些都不是的,事實(shí)上,這個(gè)mysql報(bào)錯(cuò)已經(jīng)被報(bào)告是一個(gè)mysql本身的bug并出現(xiàn)在mysql 開發(fā)者列表當(dāng)中很多年了,然而這似乎又是一種誤導(dǎo)。

在很多實(shí)例中,這種錯(cuò)誤的發(fā)生都是因?yàn)閙ysql一直以來都不能很好的支持的關(guān)系的問題, 更不幸的是它也并沒有指明到底是哪一個(gè)問題會導(dǎo)致上面那種錯(cuò)誤,下面我把導(dǎo)致這個(gè)可怕 的150錯(cuò)誤的常見原因列出來了,并且我以可能性的大小作了排序,已知的原因:

1、 兩個(gè)字段的類型或者大小不嚴(yán)格匹配,例如,如果一個(gè)是INT(10), 那么外鍵也必須設(shè)置成INT(10), 而不是 INT(11) 也不能是 TINYINT. 你得使用 SHOW 命令來查看字段的大小,因?yàn)橐恍┎樵優(yōu)g覽器有時(shí)候把 int(10) 和int(11) 都顯示為integer。另外,你還必須確定兩個(gè)字段是否一個(gè)為 SIGNED,而另一個(gè)又是UNSIGNED, 這兩字段必須嚴(yán)格地一致匹配,更多關(guān)于signed 和 unsigned 的信息,請參閱:http://www.verysimple.com/blog/?p=57

2、 你試圖引用的其中一個(gè)外鍵沒有建立起索引,或者不是一個(gè)primary key , 如果其中一個(gè)不是primary key 的,你必須為它創(chuàng)建一個(gè)索引。

3、外鍵的名字是一個(gè)已經(jīng)存在的一個(gè)鍵值了,這個(gè)時(shí)候,你應(yīng)該檢查你的數(shù)據(jù)庫以確保外健名字是唯一的,或者你在鍵名后面加上幾個(gè)隨機(jī)的字符以測試是否是這個(gè)原因。

4、 其中一個(gè)或者兩個(gè)表是MyISAM引擎的表,若想要使用外鍵約束,必須是InnoDB引擎,(實(shí)際上,如果兩個(gè)表都是MyISAM 引擎的,這個(gè)錯(cuò)誤根本不會發(fā)生,但也不會產(chǎn)生外鍵),你可以通過查詢?yōu)g覽器來設(shè)置表的引擎類型

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

6、 請確定你的Charset 和 Collate 選項(xiàng)在表級和字段級上的一致

7、 你可能設(shè)置為外鍵設(shè)置了一個(gè)默認(rèn)值,如 default=0

8, 在這個(gè)關(guān)系里面,其中的一個(gè)字段是一個(gè)混合鍵值中的一個(gè),它沒有自己獨(dú)立的索引,這時(shí),你必須為它創(chuàng)建一個(gè)獨(dú)立的索引。

9、 ALTER 聲明中有語法錯(cuò)誤

最后:建立外鍵有點(diǎn)麻煩,可以直接用Myeclipse生成ddl。。。

相關(guān)文章

最新評論

弥渡县| 化州市| 响水县| 黎城县| 文安县| 蕲春县| 固原市| 锦屏县| 道真| 徐水县| 株洲市| 独山县| 北碚区| 建阳市| 云和县| 乌鲁木齐市| 宜兰市| 安多县| 罗源县| 吕梁市| 吴忠市| 霍州市| 资中县| 大安市| 贵溪市| 常熟市| 津南区| 治多县| 济阳县| 八宿县| 翁牛特旗| 教育| 舟曲县| 乐山市| 临颍县| 宁陵县| 堆龙德庆县| 临颍县| 凭祥市| 深水埗区| 张北县|