11

将外键分配给现有表列时出现以下错误:

错误 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);

而我的父表是cdb cdb,子表是c_int。

请向我建议解决方案,因为我已经尝试使用以下命令:

ALTER TABLE cdb ENGINE=InnoDB;
ALTER TABLE c_int ENGINE=InnoDB;
4

3 回答 3

12

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

尝试使用类似的方法来找出导致问题的数据:

SELECT n_id FROM c_int WHERE n_id NOT IN (SELECT n_id FROM cdb)
于 2013-10-08T07:04:55.070 回答
4

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

我建议两种解决方案

第一个禁用约束检查

SET FOREIGN_KEY_CHECKS = 0;
ALTER TABLE c_int ADD FOREIGN KEY (n_id) REFERENCES cdb (n_id);

第二次删除或更新这些数据

delete FROM c_int WHERE n_id NOT IN (SELECT n_id FROM cdb)
于 2018-06-13T12:32:23.343 回答
1

请检查这两个字段的排序规则和字符集。cdb(n_id) 和父表中的列

于 2013-10-08T07:06:58.187 回答