MySQL 5.6.24:外键给出错误1452(23000)错误
我面临一个奇怪的问题。这件事很复杂,请暂时容忍我 我有3个具有以下模式的表:MySQL 5.6.24:外键给出错误1452(23000)错误,mysql,foreign-keys,Mysql,Foreign Keys,我面临一个奇怪的问题。这件事很复杂,请暂时容忍我 我有3个具有以下模式的表: CREATE TABLE `org_tbl` ( `OrgID` int(11) NOT NULL, `Title` varchar(128) DEFAULT NULL, PRIMARY KEY (`OrgID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 CREATE TABLE `grp_tbl` ( `GroupID` int(11) NOT NULL, `F
CREATE TABLE `org_tbl` (
`OrgID` int(11) NOT NULL,
`Title` varchar(128) DEFAULT NULL,
PRIMARY KEY (`OrgID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `grp_tbl` (
`GroupID` int(11) NOT NULL,
`FkOrgID` int(11) NOT NULL,
`Title` varchar(128) DEFAULT NULL,
PRIMARY KEY (`GroupID`,`FkOrgID`),
KEY `fk_grp_tbl_FkOrgID_org_tbl_OrgID` (`FkOrgID`),
CONSTRAINT `fk_grp_tbl_FkOrgID_org_tbl_OrgID` FOREIGN KEY (`FkOrgID`) REFERENCES `org_tbl` (`OrgID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `parent_child_grp` (
`ChildGroupID` int(11) NOT NULL,
`GroupID` int(11) NOT NULL,
`FkOrgID` int(11) NOT NULL,
`Title` varchar(128) DEFAULT NULL,
PRIMARY KEY (`ChildGroupID`,`GroupID`),
KEY `fk_cg_ChildGroupID_FkOrgID_pg_GroupID_FkOrgID` (`ChildGroupID`,`FkOrgID`),
KEY `fk_cg_GroupID_FkOrgID_pg_GroupID_FkOrgID` (`GroupID`,`FkOrgID`),
CONSTRAINT `fk_cg_ChildGroupID_FkOrgID_pg_GroupID_FkOrgID` FOREIGN KEY (`ChildGroupID`, `FkOrgID`) REFERENCES `grp_tbl` (`GroupID`, `FkOrgID`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_cg_GroupID_FkOrgID_pg_GroupID_FkOrgID` FOREIGN KEY (`GroupID`, `FkOrgID`) REFERENCES `grp_tbl` (`GroupID`, `FkOrgID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
现在,如果以下是数据集:
mysql> SELECT * FROM org_tbl;
OrgID Title
2 b
3 a
mysql> SELECT * FROM grp_tbl;
GroupID FkOrgID Title
1 3 pg_a
2 3 pg_b
mysql> SELECT * FROM parent_child_grp;
ChildGroupID GroupID FkOrgID Title
1 1 3 cg_a
2 1 3 cg_b
然后,当我尝试用以下命令更新OrgID在org_tbl中的值时:
UPDATE org_tbl SET OrgID = 1 WHERE OrgID = 3;
我发现以下错误:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`parent_child_grp`, CONSTRAINT `fk_cg_GroupID_FkOrgID_pg_GroupID_FkOrgID` FOREIGN KEY (`GroupID`, `FkOrgID`) REFERENCES `grp_tbl` (`GroupID`, `FkOrgID`) ON DELETE CASCADE ON UPD)
所以在上面的模式中发生的是
ON DELETE CASCADE ON UPDATE CASCADE
现在我无法理解为什么会发生这种情况
请帮助。当您尝试将
OrgID
值更新为1时,grp\u tbl
表和parent\u child\u grp
表的FkOrgID
列仍然包含值3
由于FkOrgID
是一个外键,取决于OrgID
,因此此更新将导致FkOrgID
列的值为3
,而该值不是OrgID
中的值。
这违反了FK条件
这就是为什么会出现此错误的原因,但我在所有外键上都有“ON DELETE CASCADE ON UPDATE CASCADE”,因此应该注意更改这些表中的值