触发器的作用_触发器的特点介绍

电子常识

2640人已加入

描述

  触发器的定义

  触发器(trigger)是SQLserver提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete,update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。

  触发器的特点

  1.自动执行。触发器在对表的数据作了任何修改(比如手工输入或者应用程序的操作)之后立即被激活。

  2.级联更新。触发器可以通过数据库中的相关表进行层叠更改,这比直接把代码写在前台的做法更安全合理。

  3.强化约束。触发器可以引用其它表中的列,能够实现比CHECK约束更为复杂的约束。

  4.跟踪变化。触发器可以阻止数据库中未经许可的指定更新和变化。

  5.强制业务逻辑。触发器可用于执行管理任务,并强制影响数据库的复杂业务规则。

  触发器的分类

  DML触发器

  当数据库中表中的数据发生变化时,包括insert,update,delete任意操作,如果我们对该表写了对应的DML触发器,那么该触发器自动执行。DML触发器的主要作用在于强制执行业务规则,以及扩展SqlServer约束,默认值等。因为我们知道约束只能约束同一个表中的数据,而触发器中则可以执行任意Sql命令。

  DDL触发器

  它是SqlServer2005新增的触发器,主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。比如在修改表,修改列,新增表,新增列等。它在数据库结构发生变化时执行,我们主要用它来记录数据库的修改过程,以及限制程序员对数据库的修改,比如不允许删除某些指定表等。

  登录触发器

  登录触发器将为响应LOGIN事件而激发存储过程。与SQLServer实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自PRINT语句的消息)会传送到SQLServer错误日志。如果身份验证失败,将不激发登录触发器。

  触发器的作用

  触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:

  (1)强化约束(Enforcerestriction)

  触发器能够实现比CHECK语句更为复杂的约束。

  (2)跟踪变化Auditingchanges

  触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。

  (3)级联运行(Cascadedoperation)。

  触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。

  (4)存储过程的调用(Storedprocedureinvocation)。

  为了响应数据库更新触,发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS(数据库管理系统)本身之外进行操作。

  由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(INSERT、UPDATE、DELETE)的多个触发器能够对同一种数据操作采取多种不同的处理。

  总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。

  触发器的工作原理

  由于使表中数据发生变化的操作有插入、更新和删除,所以触发器可以分为三类:INSERT触发器、UPDATE触发器和DELETE触发器。

  1.INSERT触发器工作过程

  当试图向表中插入记录时,INSERT触发器(如果有)自动执行,此时系统自动创建一个inserted表,新的记录被添加到触发器表和inserted表。

  触发器可以检查inserted表,确定是否执行触发器动作和如何执行触发器动作。

  2.DELETE触发器工作过程

  当试图从表中删除信息时,DELETE触发器被触发,此时系统自动创建一个deleted表,被删除的行被放置到这个特殊的表中。被删除的行在触发器表中将不再存在。因此,触发器表和deleted表之间没有共同的记录。

  3.UPDATE触发器工作过程

  UPDATE语句可以看成两步,删除一条旧记录,插入一条新记录。所以,UPDATE触发器被触发时,自动创建一个deleted表和一个inserted表,UPDATE语句使原始行移入deleted表,将更新行插入到inserted表中。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分