(05) 触发器(Trigger)的维护困境

原创 2013年12月03日 22:13:35
 触发器(trigger)在维护中的斑斑劣迹,我碰到的那是数不胜数.
        首先不是说trigger不好,数据库都提供这个技术,自然有它的好处. 
其中之一, 处理某些业务时特别简便.
    如当A的变更需要影响到B时, 触发器的事件可以马上知道这件事,不管是行级,还是表级,还是列级触发器功能都相当强大.
利用它的特性,开发可以很方便的在发生这些更改事件的前后或中间做一系列的动作. 早年间我也常用它,
可正因为它太好用了.随着项目的推进,问题就跟着来了.

       问题1: 上线后的维护困难
                当程序有错误或其它各种原因,需要仅更改某个表的资料时(这种现象相当常见), 你如果用到触发器,你将面临
一个困境,如果不停用当前的触发器,更改时将会引起连锁反应,而要停用触发器,未知的风险同样巨大。

       问题2:  将业务逻辑分割得支离破碎
             本来一个很顺的处理流程,开发人员为了省事或赶速度,把一段段逻辑代码分散在了一个个触发器中,经常解发器影响一
一个表,这个表本身又有它的触发器,或在触发器中调用存储过程,存储过程所影响的表又有触发器。
            整个流程被完全分割,处理失控状态。  更可怕的是,如果开发人员有更换。新人接手时将面临一个很惨的困境。
     
       问题3: 极容易发生死锁现象
             参考问题2, 多表的连锁反应极容易造成死锁。特别要碰上多用户并发更新一个表,或触发器所使用的某个代码或存储过程处理速度时间比较长时。
       问题4: 触发链条中,对象失效造成的断裂
            因为DDL操作,造成触发器或存储过程之类失效,而这个失效可能刚好是某个触发器链条或业务链条的一部分。没有即时恢复或在失效
         其间已有业务处理。这些对你的数据正确性是致命的,由此可能引发一系列问题。


就这几点就已经足够让我对它敬而远之了。 建议对触发器不到万不得已,不要使用它,图一时之快,最后只会伤到自己。


MAIL:xcl_168@aliyun.com
Blog:http://blog.csdn.net/xcl168

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

SQL 触发器的作用,好处和坏处

触发器,主要是用来同步更新数据的,举个例子吧:  假设有两个表,tab_1 , tab_2  再假设两个表里都有“人员性别”这个字段  tab_1的数据例如: 张三```男```1978...
  • txx9010
  • txx9010
  • 2013年03月19日 11:28
  • 14517

项目经验----触发器要谨慎使用

在一中考评系统项目中,为了使数据保留,删除数据没有使用delete,而采用的是在数据表中加一个字段,存在为‘1’,不存在为‘0’。     刚刚用户打电话过来,说:不知道数据库中的数据怎么就被删除了...

触发器,trigger

  • 2012年11月11日 15:08
  • 479KB
  • 下载

触发器的PPT文档Trigger PPT document

  • 2009年06月23日 23:41
  • 2.12MB
  • 下载

MySQL触发器Trigger实例篇

MySQL触发器Trigger实例篇 发表于668 天前 ⁄ IT技术 ⁄ 暂无评论 以前关注的数据存储过程不太懂其中奥妙,最近遇到跨数据库,同时对多个表进行CURD(Create...
  • hireboy
  • hireboy
  • 2014年01月10日 11:45
  • 26041

Unity 理解刚体(Rigidbody)和碰撞体(Collider)和触发器(Is Trigger)以及刚体休眠(Rigidbody Sleeping)

前言:      今天看到看到了 Rigidbody Sleeping这个知识点,解决了我疑惑很久的一个物理学的问题。本来笔者遇到问题会想办法去解决的,但是那是想了蛮久也没想通为什么两个物体碰撞...
  • U3D_YSJ
  • U3D_YSJ
  • 2015年08月27日 00:05
  • 1636

oracle trigger(触发器)字段触发

说到oracle的触发器,一直以来都以为只能以表触发,今天有需求某个字段的值改变后触发一系列动作,原来想这个表改变再触发,后来想了一下,触发器本来很耗性能,如果这个表的每个字段更改都触发,这样做就造成...
  • diyyong
  • diyyong
  • 2014年01月21日 15:28
  • 9303

Oracle12c中多宿主环境(CDB&PDB)的数据库触发器(Database Trigger)

oracle12c引入了多宿主选项(multitenant),即出现了CDB和PDB的概念和应用,这也会对其他方方面面的特性和应用带来不小的影响和改变,本文通过实例演示,说明了在引入多宿主选项后,触发...
  • LHDZ_BJ
  • LHDZ_BJ
  • 2016年03月01日 16:56
  • 681

unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新

做实验的时候发现了一个很诡异的事情,就是发生碰撞的主体一定是要带刚体的,即只有带刚体的碰撞体去撞其他碰撞体时,双方才会收到碰撞事件,以下是我做的实验: 一、控制A(刚体加碰撞体)撞击 静止的B(碰撞...
  • ybhjx
  • ybhjx
  • 2015年12月23日 20:12
  • 777

触发器Trigger介绍

触发器简介         触发器是数据库的一种,编码方式类似于存储过程,当有DML语句对表进行操作的时候,可以引起触发器的执行,从而实现对表的数据一致性维护;         通过触发器...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(05) 触发器(Trigger)的维护困境
举报原因:
原因补充:

(最多只允许输入30个字)