2013-02-28 128 views
0

我有兩個表'mm_ads'和'mm_users'。 'mm_ads'使用Myisam數據庫引擎,而'mm_users'使用InnoDb。從我所讀的內容來看,在這種情況下不可能創建一個外鍵索引,因爲後者引擎是事務性的,而第一個引擎不是。但是當我運行時:Mysql錯誤代碼1452與兩個表與不同的數據庫引擎

ALTER TABLE mm_ads ADD CONSTRAINT FK_76EC3E1DF132696E3358 FOREIGN KEY (userid) REFERENCES mm_users (id) 

沒有錯誤顯示,它報告受影響的行數,沒有別的。比我看到,fk不是隻創建表中列的索引。當我研究這個問題時,我發現表的引擎不同,所以我將mm_ads的引擎更改爲Innodb。但是當我運行命令時,我得到這個錯誤。

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`admin_pw`.<result 2 when explaining filename '#sql-61b_3019e'>, CONSTRAINT `FK_76EC3E1DF132696E3358` FOREIGN KEY (`userid`) REFERENCES `mm_users` (`id`)) 

userid和id的類型是相同的,我在表中有值。

+0

下降及補充外鍵約束一次。 – SparKot 2013-02-28 14:10:59

回答

2

我會做到以下幾點:

1.刪除外鍵

ALTER TABLE mm_ads DROP FOREIGN KEY `FK_76EC3E1DF132696E3358`; 

2. Indentify孤立行在子表

SELECT * FROM mm_ads when userid not in (select id from mm_users); 

3.處理孤兒行兒童表

mm_ads刪除行?將行插入mm_users?在你這裏。無論哪種方式,您必須根據mm_ads.userid>mm_users.id的關係結束mm_ads中沒有孤行。

4.更換髮動機

ALTER TABLE mm_ads ENGINE = InnoDB; 

5.恢復外鍵

ALTER TABLE mm_ads ADD CONSTRAINT FK_76EC3E1DF132696E3358 FOREIGN KEY (userid) REFERENCES mm_users (id); 
+0

感謝您的回答,問題在於孤行。 – 2013-03-01 08:53:49