其實很多情況下可以變通,比方說:我希望更改A表的同時又要根據A表的運算結果更改B表,你可在程式的提交語句中做處理,寫一段代碼或存儲過程,直接提交數據庫。

解决方案 »

  1.   

    1.sql2000已经提供的级联更新/删除,这个功能就没必要再用触发器了.2.触发器可能导致递归,这个如果控制得不好就会死循环3.当数据库中,表的结构发生变化时,可能需要逐一检查触发器,看看那些触发器需要修改4.如果一个表有几个触发器,则可能会发生触发器之间相互影响,而且触发器的执行顺序是
      不可控的. 在多个触发器之间协调比较麻烦5.写触发器和写存储过程一样,需要讲究SQL的功底,如果触发器写得不好,可能严重影响
      数据处理.6.触发器有不同的状态,而且SQL也没有行级触发,我经常看到CSDN上有人抱怨触发器不好使
      或者只处理了一部分,未处理另一部分,这些都是考虑不周造成的.7.对于数据的修改,有前台程序和后台数据库直接修改两种,如果一个触发器就只考虑前台
      处理的需要(比如说,前台每次操作只会是一条记录,写触发器就只考虑处理单记录的情况)
      这样的触发器就比较危险,如果有人在后台修改了数据,可能就会导致数据混乱
      

  2.   

    个人只喜欢instead of trigger ,根本就是不可替代。
      

  3.   

    关于触发器,个人认为是数据库不可缺少的一部分,影响性能的说法是站不住脚的。关于性能,我们可以这么设想,如果触发器所做的更改都是必要的(前提是触发器没多干不该干的事),那这些更改必定都是服务器的负担,服务器总是要干的,触发器的特点是分散来干,就是每一次操作就完成相关的操作,这实际上是一种均衡负担的做法,所以触发器不会加重负担,用得好还能提高性能。
    对邹建的理由,我逐条说我的理解:
     
     
    1.sql2000已经提供的级联更新/删除,这个功能就没必要再用触发器了.
    (同意)2.触发器可能导致递归,这个如果控制得不好就会死循环
    (控制得不好不是“触发器”的错,控制好了就行了)3.当数据库中,表的结构发生变化时,可能需要逐一检查触发器,看看那些触发器需要修改
    (表结构的变化意味着更改设计,检查和重写程序是必需的,检查和修改触发器并没有增加负担)4.如果一个表有几个触发器,则可能会发生触发器之间相互影响,而且触发器的执行顺序是
      不可控的. 在多个触发器之间协调比较麻烦
    (首先,触发器的执行顺序是可控的,只要表结构的关系是清晰的,触发器的关系也是清晰的,也是容易协调的)
    5.写触发器和写存储过程一样,需要讲究SQL的功底,如果触发器写得不好,可能严重影响
      数据处理.
    6.触发器有不同的状态,而且SQL也没有行级触发,我经常看到CSDN上有人抱怨触发器不好使
      或者只处理了一部分,未处理另一部分,这些都是考虑不周造成的.
    7.对于数据的修改,有前台程序和后台数据库直接修改两种,如果一个触发器就只考虑前台
      处理的需要(比如说,前台每次操作只会是一条记录,写触发器就只考虑处理单记录的情况)
      这样的触发器就比较危险,如果有人在后台修改了数据,可能就会导致数据混乱
    (这三条都是在触发器没有写好的情况下出现的)
       说实在的,触发器确比较难写,主要是不容易发现问题,不好调试,有是有问题的触发器运行很长时间都没发现错误,等出错的时候又找不到问题的所在。
       但这些都不是触发器本身的问题,触发器作为数据库的一部分,可以定义约束做不到的规则,可以做许多即时的统计工作,可以分散统计来提高性能。
       但是,对初学者和赶项目的人,我建议还识别用触发器,因为就算是csdn,号称中国最大的程序员论坛的csdn数据库版,对触发器回答的代码经常都是考虑不周的,很多都是只考虑插入(或者修改、删除)一条记录的情况,更不用说关键字重复、表中没有相关数据等情况。也就是说,你在这里问其他问题可能能得到基本完备的答案,但是问触发器问题往往得不到完备的答案,危险很大。 
    个人观点,欢迎不同意见
      

  4.   

    再说说触发器的优点:一、联机帮助的说法:
    使用触发器的优点
    触发器的优点如下: 触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于 10 美元的书(存储在 titles 表中)应用折扣(存储在 discounts 表中)的更新。 二、联机帮助的说法可以说只说到触发器在补充约束方面的作用,实际上触发器还有以下几个方面的优点:
    1、设计方面,强迫你的数据库设计更加规范化,因为不规范的表结构如果加上触发器,经常会出现很多问题。比如,有些人老是说触发器不正常,而他的表没有主键和唯一索引,这样的表在理论上试没法定位的,触发器在特定的情况肯定出问题。
    2、简化前端开发,前端程序可以只做增、删、改、查,不必再前端程序考虑商业规则,前端程序不必使用事务。
    3、前端提交的语句和触发器及其触发的触发器都自动做为一个事务来处理,任何一个步骤的不成功都会自动回滚,简化了后端存储过程的编写。
    4、在统计方面,触发器有其不可替代的优势,触发器在流水数据修改的同时更改统计数据,使繁重的统计工作分散到每个数据修改,可以减轻服务器负担,也使得系统的逻辑简单明了。
    5、INSTEAD OF 触发器可以轻松实现对视图数据的删改。
    6、触发器和存储过程一样,可以在备份数据同时得到备份,转移方便。