Mysql 如何使用SQL查询删除父表和子表行?

Mysql 如何使用SQL查询删除父表和子表行?,mysql,Mysql,我想从父表和子表中删除行 比如说 我有两张桌子: 1组 2组成员 组表包含以下字段: 组id、组名称、用户id 和组成员具有以下字段: id、组id、用户id 我想删除这样的内容 假设组表有 用户\ id 2和用户\ id的所有成员都可以在组\成员表中找到 表1图像 表2图像 如果触发delete query-则id=19的所有记录都将从这两个数据库中删除 表我建议您在此场景中使用ON CASCADE DELETE 发件人: 级联:删除或更新父表中的行,自动删除或更新子表中匹配的行。同时支持删除

我想从父表和子表中删除行

比如说

我有两张桌子: 1组 2组成员

组表包含以下字段:

组id、组名称、用户id

和组成员具有以下字段:

id、组id、用户id

我想删除这样的内容

假设组表有 用户\ id 2和用户\ id的所有成员都可以在组\成员表中找到

表1图像

表2图像

如果触发delete query-则id=19的所有记录都将从这两个数据库中删除 表

我建议您在此场景中使用ON CASCADE DELETE

发件人:

级联:删除或更新父表中的行,自动删除或更新子表中匹配的行。同时支持删除级联和更新级联。在两个表之间,不要定义多个作用于父表或子表中同一列的ON UPDATE CASCADE子句

注意:级联外键操作不会激活触发器。

我建议您在此场景中使用ON CASCADE DELETE

发件人:

级联:删除或更新父表中的行,自动删除或更新子表中匹配的行。同时支持删除级联和更新级联。在两个表之间,不要定义多个作用于父表或子表中同一列的ON UPDATE CASCADE子句


注意:级联外键操作不会激活触发器。

您需要使用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;

如果需要更多帮助,请告诉我

您需要使用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;

如果需要更多帮助,请告诉我

其他答案都很好,但这里有一些特定于您的问题的SQL。如前所述,使用数据库为您创造奇迹

使用ON DELETE CASCADE reference选项将外键约束添加到group_成员表中,如下所示:

ALTER TABLE `group_member`
ADD CONSTRAINT `fk_group_member_group` FOREIGN KEY ( `group_id` )
REFERENCES `group` ( `group_id` ) ON DELETE CASCADE;

这将确保对具有特定id的组的删除将级联到组成员表。

其他答案都很好,但这里有一些特定于您的问题的SQL。如前所述,使用数据库为您创造奇迹

使用ON DELETE CASCADE reference选项将外键约束添加到group_成员表中,如下所示:

ALTER TABLE `group_member`
ADD CONSTRAINT `fk_group_member_group` FOREIGN KEY ( `group_id` )
REFERENCES `group` ( `group_id` ) ON DELETE CASCADE;
这将确保对具有特定id的组的删除将级联到group_member表