无法添加或更新子行:外键约束失败

时间:2013-08-20 05:20:01

标签: mysql sql innodb

我有一张桌子

1

CREATE TABLE `Parent` (
`ID` bigint(19) NOT NULL DEFAULT '0',
 PRIMARY KEY (`ID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2

CREATE TABLE `Child_1` (
`ParentID` bigint(19) NOT NULL DEFAULT '0',
`ID` bigint(19) NOT NULL DEFAULT '0',
PRIMARY KEY (`ParentID`,`ID`),
KEY `Child_1_FK1_IDX` (`ParentID`,`ID`),
CONSTRAINT `Child_1_FK1` FOREIGN KEY (`ParentID`, `ID`) REFERENCES `Child_2` (`ParentID`,   `ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3

CREATE TABLE `Child_2` (
`ParentID` bigint(19) NOT NULL DEFAULT '0',
`ID` bigint(19) NOT NULL DEFAULT '0',
PRIMARY KEY (`ParentID`,`ID`),
KEY `Child_2_FK1_IDX` (`ParentID`),
CONSTRAINT `Child_2_FK1` FOREIGN KEY (`ParentID`) REFERENCES `Parent` (`ParentID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

不幸的是,我删除了第二个表约束。

CONSTRAINT `Child_1_FK1` FOREIGN KEY (`ParentID`, `ID`) REFERENCES `Child_2` (`ParentID`,   `ID`) ON DELETE CASCADE

我该如何恢复?

2 个答案:

答案 0 :(得分:0)

试试这个(未经测试):

ALTER TABLE Child_1
ADD FOREIGN KEY (`ParentID`, `ID`) 
REFERENCES `Child_2` (`ParentID`,   `ID`) 
ON DELETE CASCADE

<强>更新

要获取违反约束的记录,请运行:

select child1.ID from 
   Child_1 child1 left join Child_2 child2 on child1.ParentID=child2.ParentID and  child1.ID=child2.ID
where child2.ID is null and child2.ParentID is null;

答案 1 :(得分:0)

最好采取转储。冷启动数据库。