`
yaowei06252009
  • 浏览: 85466 次
  • 性别: Icon_minigender_1
  • 来自: 蚌埠
社区版块
存档分类
最新评论

oralce触发器介绍

阅读更多
触发器的概述、分类

触发器是一个特殊的过程,不能带参数,触发器的主要作用是对表进行完整性的约束。

触发器组成---------------触发事件

                -----------------触发对象

事务的概述

什么是事务:事务是数据库中重要的机制,用于确保数据完整性和并发处理的能力,他将一条/一组sql语句当作一个逻辑上的单元,用来保证这些语句都成功/失败。


事务的特性:

事务具有ACID四大特性:

某种意义上说,原子性是手段,一致性是目的,通过原子性的手段达到一致性的目的。

A: 原子性: 做都做 不做都不做-------手段

C:一致性: 做事务操作的前后,数据保持一致性-----目的

I: 隔离性: 隔离性越强,并发性越弱

                 ---------用for update 来实现事务的隔离性 通过锁的特性:

                                     |

                            是一个加锁过程

D:永久性:同一个事务在commit 之后不能rollback


notes: oracle中 DML语言 发生时 oracle 只操作内存,并不能自动提交



行触发器:

DML 行触发器:

example:

create or replace trigger mytri

after delete on d for each row

begin

delete from e where e.id=:old.id;

end mytri;

create or replace trigger mytri

after insert on e

begin

insert into d value(:new.id,'name');

end;


行触发器的工作原理是 俩个重要的内存表

                   old                 new

insert          ----                    ok

update         ok                   ok

delete           ok                     ----

create or replace trigger mytri

after update on d for each row

begin

update e set id=:new.id where id=:old.id;

end;

notes:触发器语句内不能有commit和rollback

用触发器来控制表

---------

create or replace trigger mytri

after delete on e for each row

begin

ifld.id='0001' then

raise_application_error(-20000,'不能删除');

end if;                                  |

end;                                范围是(-20999,-20000)

语句级触发器:

example:

create table mylog(

curr_user varchar2(10),

curr_date date,

curr_act   char(1));

create or replace trigger mytri

after insert or update or delete on e

begin

if inserting then

insert into mylog values(user,sysdate,'I');

else if updating then

insert into mylog values(user,sysdate,'U');

else

insert into mylog values(user,sysdate,'D');

end if;

end;

触发器和序列的共同应用 实现表主键自增

create sequence myseq

start with 1

increment by 1

order

no cycle;

create or replace trigger mytri

before insert on e

declare

sn number(4);

begin

select myseq.nextval into sn from dual;

:new.id=sn;

end;


oracle 中的替换触发器的应用:

笔者解读:oralce中替换触发器是行级触发器中的特例,核心思想是利用了内存中的new表和old表

用替换触发器可以解决视图中更新多个基表的操作

在oracle中 替换触发器只能建立在视图上


example:

create or replace trigger view_tri

instead of insert on myview for each row

begin

insert into d values(:new.id,:new.dname);

insert into e(eid,ename,sex,id) values(:new.eid,:new.ename,:new.sex,:new.id);

end;
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics