2017-02-08 19 views
-1

私は奇妙な問題に直面しています。複雑なので、しばらく私と一緒に耐える。MySQL 5.6.24:外部キーがエラー1452(23000)エラーを返します

UPDATE org_tbl SET OrgID = 1 WHERE OrgID = 3; 
:私はorg_tblにORGIDの値を更新しようとすると、その後

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 

:以下は、データセットの場合は今

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 

は、私は、次のスキーマを持つ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) 

  1. parent_child_grpある(ChildGroupID、FkOrgID)=> grp_tbl(グループID、FkOrgID)
  2. parent_child_grp(グループID、FkOrgID)=> grp_tbl(グループID、FkOrgID)

第2の外部キー制約[ie parent_child_grp(GroupID、FkOrgID)=> grp_tbl(GroupID、FkOrgID)]、すべて正常に動作します。

** NOTE:

ON DELETE CASCADE ON UPDATE CASCADE 

は今、私はこれが起こっている理由を理解することはできませんよ:すべてのテーブルがで外部キーを持っています。

助けてください。

答えて

1

あなたは1にOrgID値を更新しようとすると、grp_tblテーブルのとparent_child_grpテーブルのFkOrgID列がまだFkOrgIDので、値3

が含まれていますがOrgIDに応じて、外部キーで、このアップデートは持っているFkOrgID列が発生します3の値はOrgIDではありません。 これはFK条件に違反します。すべての外部キー にあなたが

+0

このエラーを得ている。しかし、私は、「UPDATE CASCADE ON DELETE CASCADE ON」持っている理由だから、それらのテーブルに値を変更するの世話をする必要があります