下面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核心技术与最佳实践》的学习笔记