Mysql错误代码1452,带有两个具有不同数据库引擎的表

时间:2013-02-28 13:54:46

标签: mysql foreign-keys innodb

我有两个表'mm_ads'和'mm_users'。 'mm_ads'使用Myisam数据库引擎,而'mm_users'使用InnoDb。从我读到的内容来看,在这种情况下创建外键引用是不可能的,因为后一引擎是事务性的而第一种不是。但是当我跑步时:

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的类型相同,我在表中有值。

1 个答案:

答案 0 :(得分:2)

我会做以下事情:

<强> 1。删除外键

ALTER TABLE mm_ads DROP FOREIGN KEY `FK_76EC3E1DF132696E3358`;

<强> 2。识别儿童表中的孤立行

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

第3。处理儿童表中的孤立行

mm_ads删除行?将行插入mm_users?在这里由你决定。无论哪种方式,您都必须根据mm_ads&gt;结果mm_ads.userid中没有孤立的行。 mm_users.id关系。

<强> 4。更改引擎

ALTER TABLE mm_ads ENGINE = InnoDB;

<强> 5。恢复外键

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