MySQL 5.6.24:外键给出错误1452(23000)错误

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

我面临一个奇怪的问题。这件事很复杂,请暂时容忍我

我有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,
  `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)
所以在上面的模式中发生的是

  • 父项\u子项\u grp(ChildGroupID,FkOrgID)=>grp\u tbl(GroupID,FkOrgID)
  • 父项\u子项\u grp(GroupID,FkOrgID)=>grp\u tbl(GroupID,FkOrgID)
  • 如果删除第二个外键约束[e.parent_child_grp(GroupID,FkOrgID)=>grp_tbl(GroupID,FkOrgID)],则一切正常

    **注意:所有表都有外键,外键包括:

    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”,因此应该注意更改这些表中的值