2013-08-20 116 views
0

我有一个表不能添加或更新子行,外键约束失败

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 

我该如何恢复?

回答

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; 
+0

当我测试此查询,我得到了“不能添加或更新子行,外键约束失败” – Suresh

+0

这意味着,数据已插入到违反约束的表...请删除这些记录( s),然后运行这个将约束添加到表 – rags

+0

你能解决这个问题吗? – rags

相关问题