0

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

4

1 回答 1

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无论哪种方式,您都必须根据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);
于 2013-02-28T14:24:30.793 回答