错误1452(23000):无法添加或更新子行:现有表的外键约束失败

use*_*537 6 mysql sql database

在将外键分配给现有表列时,我收到以下错误:

错误1452(23000):无法添加或更新子行:外键约束失败(c_x_parsing.#sql-787_1,CONSTRAINT #sql-787_1_ibfk_1FOREIGN KEY(nct_id)REFERENCES cdb(nct_id))

以下是我的查询:

ALTER TABLE c_int ADD FOREIGN KEY (n_id) REFERENCES cdb (n_id);
Run Code Online (Sandbox Code Playgroud)

我的父表是cdb cdb而子表是c_int.

请通过以下命令向我推荐解决方案:

ALTER TABLE cdb ENGINE=InnoDB;
ALTER TABLE c_int ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)

Sch*_*zIT 8

问题不是命令,而是数据.子表中的值在父表中不存在.

尝试使用类似的东西来确定导致问题的数据:

SELECT n_id FROM c_int WHERE n_id NOT IN (SELECT n_id FROM cdb)
Run Code Online (Sandbox Code Playgroud)


Yus*_*sef 8

似乎 c_int 表中有一些记录,它们的n_id值在 cdn 表上不可用。

我建议两种解决方案

第一个禁用约束检查

SET FOREIGN_KEY_CHECKS = 0;
ALTER TABLE c_int ADD FOREIGN KEY (n_id) REFERENCES cdb (n_id);
Run Code Online (Sandbox Code Playgroud)

其次删除或更新这些数据

delete FROM c_int WHERE n_id NOT IN (SELECT n_id FROM cdb)
Run Code Online (Sandbox Code Playgroud)