设为首页 收藏本站
查看: 508|回复: 0

[经验分享] Oracle学习笔记(五)——事务&触发器

[复制链接]

尚未签到

发表于 2016-8-9 06:07:39 | 显示全部楼层 |阅读模式
  上图:(点击查看大图)
DSC0000.jpg
  重点记住概念和特点就好,对于隔离级别用处不太大,不过面试的时候很有可能被问及,事务的特点中原子性没有做出解释,主要因为这是4个特点中最难理解的最抽象的一个,但是原子性我们可以理解为:封装.意思就是说,整个事务的运行对外是不可见的,用户只能看到运行前的状态和运行后的状态.
      今天的第2大块内容就是另人爱又怕的触发器,它比较像JAVA中的Filter类,在执行SQL语句时首先自动调用对应触发器,这很方便我们解决不少业务问题,但是一旦触发器使用较多,会使系统过于灵活而导致不可跟踪,不可维护,所以又要谨慎使用,具体概念如下:(点击查看大图)
DSC0001.jpg
  触发器和存储过程的比较:
  触发器                            存储过程
  编写           无参数,无返回值                 都可以有,当然也可以没有
  编写           不能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;
<!--   -->

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-254863-1-1.html 上篇帖子: Oracle中to_char函数的用法 下篇帖子: Oracle通过生日精确计算年龄
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表