mysql利用触发器在删除父表的之前先删除子表记录

下面sql语句分别创建组织organization表(父表)与成员member表(子表)。注意:这两个表之间虽然创建了外键约束关系,但不存在级联删除选项。

create table organization(
	o_no int not null auto_increment,
	o_name varchar(32) default '',
	primary key(o_no)
)engine=innodb;

create table member(
	m_no int not null auto_increment,
	m_name varchar(32) default '',
	o_no int,
	primary key(m_no),
	constraint organization_member_fk foreign key (o_no) references organization(o_no)
)engine=innodb;

使用insert语句分别向两个表中插入若干测试数据。

insert into organization(o_no,o_name) values(null,'o1'),(null,'o2');
insert into member(m_no,m_name,o_no) values(null,'m1',1),(null,'m2',1),(null,'m3',1),(null,'m4',2),(null,'m5',2);

接着创建触发器。该触发器实现的功能是:删除orgnization表中的某些组织信息前,首先删除成员member表中与之对应的信息

delimiter $$
create trigger organization_delete_before_trigger before delete on organization for each row
	begin
	delete from member where o_no=old.o_no;
	end;
	$$
delimiter ;


下面是查询和删除结果显示

可以看出在删除organization的o_no=1记录时,相应的子表记录也被删除了

本文为《mysql核心技术与最佳实践》的学习笔记

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值