您的位置:首页 > 数据库 > MySQL

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

2016-12-12 16:31 323 查看
下面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核心技术与最佳实践》的学习笔记
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: