我想从父表和子表中删除行。
例如
我有两张桌子: 1)组 2) group_member
组表包含以下字段:
group_id , Group_name , user_id
和 group_member 包含以下字段:
id , group_id , user_id
我想删除这样的内容,
假设组表有 user_id 2 user_id 的所有成员均可在 group_member 表
上找到表1图像
表2图像
如果删除查询,则会删除所有 id = 19的记录 表
答案 0 :(得分:-1)
我建议您在此方案中使用ON CASCADE DELETE
。
来自MYSQL Doc:
CASCADE:从父表中删除或更新行,并自动删除或更新子表中的匹配行。支持ON DELETE CASCADE和ON UPDATE CASCADE。在两个表之间,不要定义几个ON UPDATE CASCADE子句,这些子句作用于父表或子表中的同一列。
注意:级联外键操作不会激活触发器。
答案 1 :(得分:-1)
您需要使用DELETE CASCADE,只需使用下表并进行测试。
-- ----------------------------
-- Table structure for candidate_master
-- ----------------------------
DROP TABLE IF EXISTS `candidate_master`;
CREATE TABLE `candidate_master` (
`candidate_id` int(10) unsigned NOT NULL,
`first_name` varchar(100) DEFAULT NULL,
`middle_name` varchar(100) DEFAULT NULL,
`last_name` varchar(100) DEFAULT NULL,
`phone_number` varchar(25) NOT NULL,
`callerid` varchar(25) DEFAULT NULL,
`duration` int(11) DEFAULT NULL,
`city` varchar(50) DEFAULT NULL,
`state` varchar(80) DEFAULT NULL,
`date_modified` datetime DEFAULT NULL,
`key_skills` text,
`visa` varchar(20) DEFAULT NULL,
`status` varchar(100) DEFAULT NULL,
`pvm` enum('voicemail','ping') DEFAULT NULL,
`id` int(11) NOT NULL,
`isDNC` enum('NO','YES') NOT NULL DEFAULT 'NO',
UNIQUE KEY `number` (`phone_number`) USING BTREE,
KEY `candidate_master_ibfk_1` (`id`),
CONSTRAINT `candidate_master_ibfk_1` FOREIGN KEY (`id`) REFERENCES `cgListUpdateLog` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- ----------------------------
-- Table structure for cgListUpdateLog
-- ----------------------------
DROP TABLE IF EXISTS `cgListUpdateLog`;
CREATE TABLE `cgListUpdateLog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`file_name` varchar(255) DEFAULT NULL,
`pass` int(11) DEFAULT NULL,
`fail` int(11) DEFAULT NULL,
`UpdatedOn` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`status` enum('NEW','PROCESSING','PROCESSED','FAILED') DEFAULT NULL,
`dialStatus` enum('YES','NO') DEFAULT 'NO',
`notDialed` int(11) DEFAULT NULL,
`filestatus` enum('processed','pending') DEFAULT 'processed',
`comment` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=latin1;
如有任何进一步的帮助,请告诉我!!
答案 2 :(得分:-1)
其他答案很好,但这里有一些针对您问题的SQL。如上所述,使用数据库为你做神奇的事。
使用FOREIGN KEY
引用选项向group_member
表添加ON DELETE CASCADE
约束:
ALTER TABLE `group_member`
ADD CONSTRAINT `fk_group_member_group` FOREIGN KEY ( `group_id` )
REFERENCES `group` ( `group_id` ) ON DELETE CASCADE;
这将确保具有特定ID的组上的删除将级联到group_member表。