如何修复 MySQL 中的错误:1452 - 无法添加或更新子行:外键约束失败

问题描述 投票:0回答:4

我在 Navicat 中运行 sql 查询,所以出现错误;

查询:

ALTER TABLE `customer_eav_attribute`
  ADD CONSTRAINT `CUSTOMER_EAV_ATTRIBUTE_ATTRIBUTE_ID_EAV_ATTRIBUTE_ATTRIBUTE_ID` 
  FOREIGN KEY (`attribute_id`) 
  REFERENCES `eav_attribute` (`attribute_id`) 
  ON DELETE CASCADE;

错误:

1452 - Cannot add or update a child row: a foreign key constraint
fails (`caterin1_test`.`#sql-dd4_13`, CONSTRAINT
`CUSTOMER_EAV_ATTRIBUTE_ATTRIBUTE_ID_EAV_ATTRIBUTE_ATTRIBUTE_ID`
FOREIGN KEY (`attribute_id`) 
REFERENCES `eav_attribute` (`attribute_id`) 
ON DELETE CA)

我该如何修复它?

mysql foreign-keys
4个回答
3
投票

当您尝试将文件源导入现有数据库时,通常会发生这种情况。删除两个表(customer_eav_attribute、eav_attribute)。请重新创建表。

CREATE TABLE t1
(id INTEGER);

CREATE TABLE t2
(t1_id INTEGER,
 CONSTRAINT FOREIGN KEY (t1_id) REFERENCES t1 (id));

然后这样设置。

ALTER TABLE `customer_eav_attribute`
  ADD CONSTRAINT `CUSTOMER_EAV_ATTRIBUTE_ATTRIBUTE_ID_EAV_ATTRIBUTE_ATTRIBUTE_ID` 
  FOREIGN KEY (`attribute_id`) 
  REFERENCES `eav_attribute` (`attribute_id`) 
  ON DELETE CASCADE;

2
投票

我认为eav_attribute表和customer_eav_attribute表中没有链接的id。 您必须检查eav_attribute表和customer_eav_attribute表(最好的方法:请删除eav_attribute和customer_eav_attribute,然后再次插入数据)。 你可以找到解决方案。


2
投票

在定义外键来引用它之前,父表必须存在。您必须以正确的顺序定义表:首先是父表,然后是子表。如果两个表相互引用,则必须创建一个没有 FK 约束的表,然后创建第二个表,然后使用 ALTER TABLE 将 FK 约束添加到第一个表。


0
投票

当我遇到这个错误时,是因为子表中的数据未映射到父表中的主键。我运行了外连接查询来查找不正确的记录,然后将其删除。在子表中的所有数据都可以与父表相关之后,我能够创建一对多关系。

© www.soinside.com 2019 - 2024. All rights reserved.