【问题标题】:Mysql error code 1452 with two tables with different database enginesMysql 错误代码 1452 有两个具有不同数据库引擎的表
【发布时间】:2013-02-28 13:54:45
【问题描述】:

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

【问题讨论】:

  • 再次删除并添加外键约束。

标签: mysql foreign-keys innodb


【解决方案1】:

我会做以下事情:

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.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);

【讨论】:

  • 感谢您的回答,问题出在孤立的行上。
猜你喜欢
  • 2016-02-17
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多