2013-02-28 136 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