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

if :old.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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值