Oracle学习笔记(五)——事务&触发器

系统 1679 0

上图:(点击查看大图)

      Oracle学习笔记(五)——事务&触发器

    重点记住概念和特点就好,对于隔离级别用处不太大,不过面试的时候很有可能被问及,事务的特点中原子性没有做出解释,主要因为这是4个特点中最难理解的最抽象的一个,但是 原子性我们可以理解为:封装.意思就是说,整个事务的运行对外是不可见的,用户只能看到运行前的状态和运行后的状态.

    今天的第2大块内容就是另人爱又怕的触发器,它比较像JAVA中的Filter类,在执行SQL语句时首先自动调用对应触发器,这很方便我们解决不少业务问题,但是一旦触发器使用较多,会使系统过于灵活而导致不可跟踪,不可维护,所以又要谨慎使用,具体概念如下:(点击查看大图)

    Oracle学习笔记(五)——事务&触发器

触发器和存储过程的比较:

                 触发器                            存储过程

编写           无参数,无返回值                 都可以有,当然也可以没有

编写           不能commit或rollback                   可以

调用方式       事件发生时自动调用                  手工调用

操作对象       基于某一张表                        与表无关

 

补充:

  事务的实现机制:事务处理是通过日志文件实现的,当系统因意外重启时,系统会首先调用日志文件,日志文件中如果记录了事务的结束标志,则表示事务处理完成,如果日志文件中没有出现事务的结束标志,这时系统会将对应的事务反向执行一次,以回归到事务执行前的状态,相当于回滚.

 

每日一问:

   如何避免死锁?

 答:死锁是因为两个用户同用一个资源而产生的.

    解决的方法:指定访问共享资源的顺序.

 

   如何解决死锁?

 答:当用户不能查询或不能更新时,就可能发生了死锁

   解决方法:在一个死循环中检查系统的锁,如果发现死锁对象,则直接KILL掉!

 

每日一练:

  过滤器,目的是为了方便记忆:

CREATE OR REPLACE TRIGGER tr_autoid
BEFORE INSERT OR UPDATE OR DELETE ON t_t1
FOR EACH ROW
DECLARE
   num t_t1.t_id%TYPE;
BEGIN
    IF inserting THEN
         SELECT Max(t_t1.t_id) INTO num FROM t_t1;
         :NEW.t_id := nvl(num,0)+1;
    END IF;
    IF updating THEN
         :NEW.t_name := initcap(:NEW.t_name);
    END IF;
    IF deleting THEN
         IF :OLD.t_name='Lei' THEN
             raise_application_error(-20020,'该用户是超级用户,不能删!');
         END IF;
    END IF;
END;

<!-- -->

Oracle学习笔记(五)——事务&触发器


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论