级连删除触发器
来源:互联网 发布:海岛奇兵升级数据 编辑:程序博客网 时间:2024/04/29 13:09
(二个有外键关系的表,当删除主表一条记录时,级连删除子表的相关记录).
如果仅仅想实现级联删除的话。可能创建创建带级联删除的外键。这样的话,会好很多。如这样:alter table proout add constraint fk2 foreign key(cusno)references customer (cusno) on delete cascade你也可以将delete换成update以实现级联修改。当然,如果你想使用触发器的话,也可以这样:if OBJECT_ID('Tri_delete')>0drop trigger Tri_deletegocreate trigger Tri_deletefor deleteasbegin--批量删除 BEGIN set nocount on delete from 子表 where 子表.id in (select id from deleted)set nocount off END if(@@error<>0) begin rollback transaction raiserror('触发器Tri_delete删除数据操作异常!',16,1) endend go
== 摘录自百度问答
写一个触发器,当主表A记录被删除时,同步删除子表B,C,D的记录:表示:这个比较容易明白create trigger trg_表A_deleteon 表Aafter deleteasbeingdelete from 表B,deleted where 表B.id=deleted.iddelete from 表c,deleted where 表c.id=deleted.iddelete from 表d,deleted where 表d.id=deleted.idend
oracle sql:
create or replace trigger delete_abbefore delete on afor each row delete from b where b.id=:old.id;end delete_ab;
Oracle中主从多表删除数据时:
1.用触发器;
2.建表时加关键字。比如B表某列关联A表主键列,则:
create table b (col number references a(col) on delete cascade);
后面的C表D表类似处理。
级联删除既能用外键on delete cascade, 也能用触发器
但是触发器消耗资源较多, 而且有经验的DBA可能会知道,解发器会引起许多麻烦, 不建议使用
外键多级级联删除测试:
SQL> create table t1 2 ( 3 id varchar2(10), 4 name varchar2(10) 5 ); Table created SQL> create table t2 2 ( 3 id varchar2(10), 4 pid varchar2(10), 5 name varchar2(10) 6 ); Table created SQL> SQL> create table t3 2 ( 3 id varchar2(10), 4 pid varchar2(10), 5 name varchar2(10) 6 ); Table createdSQL> alter table t1 2 add constraint pk_t1 primary key (id); Table alteredSQL> SQL> alter table t2 2 add constraint pk_t2 primary key (id); Table altered SQL> SQL> alter table t3 2 add constraint pk_t3 primary key (id); Table alteredSQL> alter table t2 add constraint FK_t1_t2 foreign key (pid) references t1(id) on delete cascade not deferrable; Table alteredSQL> alter table t3 add constraint FK_t2_t3 foreign key (pid) references t2(id) on delete cascade not deferrable; Table alteredSQL> insert into t1 values('1','aaa'); 1 row inserted SQL> insert into t1 values('2','bbb'); 1 row inserted SQL> insert into t2 values ('1','1','mmm'); 1 row inserted SQL> insert into t2 values ('2','1','nnn'); 1 row inserted SQL> insert into t3 values ('1','1','xxx'); 1 row inserted SQL> commit; Commit complete SQL> select * from t1; ID NAME---------- ----------1 aaa2 bbb SQL> select * from t2; ID PID NAME---------- ---------- ----------1 1 mmm2 1 nnn SQL> select * from t3; ID PID NAME---------- ---------- ----------1 1 xxxSQL> delete t1 where id = '1'; 1 row deleted SQL> commit; Commit complete SQL> select * from t1; ID NAME---------- ----------2 bbb SQL> select * from t2; ID PID NAME---------- ---------- ---------- SQL> select * from t3; ID PID NAME---------- ---------- ---------- SQL> rollback; Rollback complete
Oracle 触发器 插入,更新,删除,数据同步,两表同步
建表:create table User_Info ( ID INTEGER not null, UserName VARCHAR(30) not null, PassWord VARCHAR(20) not null, CreateDate Date not null, Status INTEGER not null, constraint PK_User_Info primary key (ID));create table User_Info_temp ( ID INTEGER not null, UserName VARCHAR(30) not null, PassWord VARCHAR(20) not null, CreateDate Date not null, Status INTEGER not null, constraint PK_User_Info_temp primary key (ID));触发器写法:create or replace trigger UserToTemp after insert or update or deleteon user_info for each rowdeclare integrity_error exception; errno integer; errmsg char(200); dummy integer; found boolean; beginif inserting then insert into User_info_temp(ID,UserName,PassWord,CreateDate,Status) values(:NEW.ID,:NEW.UserName,:NEW.PassWord,:new.CreateDate,:NEW.Status);elsif updating then update User_info_temp set ID=:NEW.ID,UserName=:NEW.UserName,PassWord=:NEW.PassWord,Status=:NEW.Status where id=:OLD.id;elsif deleting then delete from User_info_temp where id=:OLD.id;end if;exception when integrity_error then raise_application_error(errno, errmsg);end;测试数据:insert into user_info(ID,UserName,PassWord,CreateDate,Status)values(1,'xier','222',to_date('2008-10-11','yyyy-mm-dd'),1)update user_info u set u.status=3,u.username='xier' where u.id=1delete from user_info u where u.id=1
0 0
- 级连删除触发器
- 触发器实现级连删除
- 级连删除,级连更新
- SQL上下级级连操作触发器
- 触发器 删除
- 删除触发器
- 删除触发器
- 关于mysql连级删除,递归问题,
- sql级联删除,有外键引用级联删除,最简单的方法,SQL级连删除,级连删除
- mysql查看触发器 删除触发器
- 连表删除数据
- delete连表删除
- 关于连级目录的创建、删除、打印
- 触发器多表删除
- 更新、删除触发器使用
- 查询、删除触发器
- SQL删除、插入触发器
- oracle级联删除 触发器
- 巫山哪里治疗宫颈息肉效果好
- 相 位裕度 ,增 益裕度 防止自激
- APP中数据加载的6种方式
- poj 2250 Compromise dp lcs 路径输出
- 设计模式C++实现(11)——装饰模式
- 级连删除触发器
- android ListView和GridView拖拽移位实现代码
- c#对象序列化
- Spring aop试用
- 设计模式C++实现(12)——备忘录模式
- Windows7 SP1导致含有ADO的程序运行失败问题
- DZY Loves Strings
- How to cache server responses in iOS apps
- ajaxanywhere 总结