關於linux下使用phpmyadmin給mysql表關聯外鍵的問題和解決辦法

今天使用phpmyadmin關聯外鍵的時候一直報錯

#1452 - Cannot add or update a child row: a foreign key constraint fails......

弄了半天 終於解決了這個問題  以下就是幾點需要注意的地方

首先:要知道

在MySQL 3.23.44版本後,InnoDB引擎類型的表支持了外鍵約束
外鍵的使用條件:
1.兩個表必須是 InnoDB表,MyISAM表暫時不支持外鍵(據說以後的版本有可能支持,但至少目前不支持);
2.外鍵列必須建立了索引,MySQL 4.1.2以後的版本在建立外鍵時會自動創建索引,但如果在較早的版本則需要顯示建立;
3.外鍵關係的兩個表的列必須是數據類型相似,也就是可以相互轉換類型的列,比如int和tinyint可以,而int和char則不可以

其次:去實踐

由於表中已經有了數據,需要關聯的字段可能會因爲數據的不一致而導致關聯失敗。

1.首先看看兩個表是不是一樣的字段,如果不是,改成一樣的字段,字段名可以不一樣,但是字段類型必須一樣,如果是,就看看兩個表中這個字段中的數據是否一一對應。

2.在linux的終端裏進入mysql,進去後使用

select * from 表1 where 表1中的字段 not in (select 表2中的字段 from 表2);

如果有結果,在phpmyadmin中刪除這些結果。

如果沒有結果,將這個語句反過來用一下,即:

select * from 表2 where 表2中的字段 not in (select 表1中的字段 from 表1);

如果有結果,刪除之,如果沒有結果,繼續。

3.在phpmyadmin中找到想要關聯外鍵的那個表,點擊下邊的索引,看看你的索引有沒有什麼問題,重複的無效的等等,解決之後繼續。

4.在phpmyadmin中找到想要關聯外鍵的那個表,點擊下邊的查看關係,找到你想要的字段,點擊旁邊的下拉框,然後正常按程序走,最後執行就完事了。

最後:總結

解決這個問題用了2個多小時,總是失敗,不知道什麼原因,還好沒有激動一下把數據都刪掉,建議在建表之前就想好關係,在建表的時候就把關係直接添加上,沒有數據還是很容易添加的。

最最後:提醒

兩個表一定要都是InnoDB類型的,MYISAM是不好用的,想知道爲啥,去google。

以上

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章