您需要在參考parent_id
和status
的child
表中創建複合外鍵。
這裏有一個演示:
-- ----------------------------
-- Table structure for `parenttable`
-- ----------------------------
DROP TABLE IF EXISTS `parenttable`;
CREATE TABLE `parenttable` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`status` int(11) NOT NULL,
PRIMARY KEY (`ID`),
KEY `ID` (`ID`,`status`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of parenttable
-- ----------------------------
INSERT INTO `parenttable` VALUES ('1', '1');
INSERT INTO `parenttable` VALUES ('2', '0');
INSERT INTO `parenttable` VALUES ('3', '1');
-- ----------------------------
-- Table structure for `childtable`
-- ----------------------------
DROP TABLE IF EXISTS `childtable`;
CREATE TABLE `childtable` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) NOT NULL,
`status` int(11) NOT NULL,
PRIMARY KEY (`ID`),
KEY `fk_childTable_parent_id` (`parent_id`,`status`),
CONSTRAINT `fk_childTable_parent_id` FOREIGN KEY (`parent_id`, `status`) REFERENCES `parenttable` (`ID`, `status`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of childtable
-- ----------------------------
INSERT INTO `childtable` VALUES ('1', '1', '1');
INSERT INTO `childtable` VALUES ('3', '1', '1');
INSERT INTO `childtable` VALUES ('6', '1', '1');
INSERT INTO `childtable` VALUES ('4', '2', '0');
INSERT INTO `childtable` VALUES ('5', '2', '0');
測試:
現在嘗試更新父表的ID = 1
的status
領域。
此更改還會觸發child
表中所有子條目狀態值的更改。
UPDATE parentTable SET status = 0 WHERE ID = 1;
SELECT * FROM childTable WHERE parent_id = 1;
輸出:
ID parent_id status
1 1 0
2 1 0
3 1 0
同樣適用於DELETE
操作
See Demo
如果您需要稍後添加外鍵約束:
ALTER TABLE `childTable` ADD CONSTRAINT `fk_childTable_parent_id_status` FOREIGN KEY (
`parent_id`,
`status`
) REFERENCES `parentTable` (`ID`, `status`) ON DELETE CASCADE ON UPDATE CASCADE;
我猜'ON UPDATE CASCADE'會做。 – 1000111
但我應該是什麼關鍵我不能在狀態上設置FK關係,因爲我必須將它與parent_id關聯起來,如何設置這兩列之間的關係。 – Arpita
可能您需要創建共軛外鍵。讓我檢查一下 – 1000111