我有两个表'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的类型相同,我在表中有值。
答案 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);