我在 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)
我该如何修复它?
当您尝试将文件源导入现有数据库时,通常会发生这种情况。删除两个表(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;
我认为eav_attribute表和customer_eav_attribute表中没有链接的id。 您必须检查eav_attribute表和customer_eav_attribute表(最好的方法:请删除eav_attribute和customer_eav_attribute,然后再次插入数据)。 你可以找到解决方案。
在定义外键来引用它之前,父表必须存在。您必须以正确的顺序定义表:首先是父表,然后是子表。如果两个表相互引用,则必须创建一个没有 FK 约束的表,然后创建第二个表,然后使用 ALTER TABLE 将 FK 约束添加到第一个表。
当我遇到这个错误时,是因为子表中的数据未映射到父表中的主键。我运行了外连接查询来查找不正确的记录,然后将其删除。在子表中的所有数据都可以与父表相关之后,我能够创建一对多关系。