use*_*537 6 mysql sql database
在将外键分配给现有表列时,我收到以下错误:
错误1452(23000):无法添加或更新子行:外键约束失败(
c_x_parsing.#sql-787_1,CONSTRAINT#sql-787_1_ibfk_1FOREIGN KEY(nct_id)REFERENCEScdb(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)
问题不是命令,而是数据.子表中的值在父表中不存在.
尝试使用类似的东西来确定导致问题的数据:
SELECT n_id FROM c_int WHERE n_id NOT IN (SELECT n_id FROM cdb)
Run Code Online (Sandbox Code Playgroud)
似乎 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)
| 归档时间: |
|
| 查看次数: |
6159 次 |
| 最近记录: |