利用OEACLEmysql触发器删除数据触发表中的数据行

下面sql语句分别创建组织organization表(父表)与成员member表(子表)。注意:这两个表之间虽然创建了外键约束关系,但不存在级联删除选项。create table organization( o_no int not null auto_increment, o_name varchar(32) default '', primary key(o_no))engine=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=使用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_
$$下面是查询和删除结果显示可以看出在删除organization的o_no=1记录时,相应的子表记录也被删除了本文为《mysql核心技术与最佳实践》的学习笔记
最新教程周点击榜
微信扫一扫请教一个oracle使用触发器删除数据的问题~ - ITeye问答
有A和B两个表,想实现删除B表记录时同时删除A表中相应的记录。
创建的触发器如下:
create or replace trigger Trig_Del
after delete
on B
for each row
declare
begin
delete from A where CardID=:old.CardID and Name=:old.
end
;
在需要删除时,直接把B表中的数据全部删除,即用语句:delete from B
现在的问题是:
如果B表中的记录较少(比如上百条)时,delete能够正常返回,触发器能够正
常执行。但是当B表中有上万条或更多记录时,delete语句一直不返回,请问这
种问题怎么解决?
除了用触发器之外,要实现类似的批量删除,用什么方法比较好?
说明:A表和B表中都有大量数据,10万条以上,求高率的方法!
1、首先检查表的索引创建是否合理,针对你的问题,索引创建不合理会导致性能下降很多。
2、有没有其他的业务字段把一个delete拆分为多个,以前曾经把全国的删除按省拆分为20几个delete。
如果是全表删除,建议楼主用truncate。
用truncate替代delete from,效率会高很多。
已解决问题
未解决问题}

我要回帖

更多关于 mysql触发器删除数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信