如何分析sql中的触发器

72次阅读
没有评论

共计 3268 个字符,预计需要花费 9 分钟才能阅读完成。

这篇文章主要为大家分析了如何分析 sql 中的触发器的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随丸趣 TV 小编一起来看看,下面跟着丸趣 TV 小编一起深入学习“如何分析 sql 中的触发器”的知识吧。

一. 触发器是什么

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

二. 触发器能干什么

        触发器可以查询其他表,而且可以包含复杂的 SQL 语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。这是百度百科的答案, 看到不懂, 那我觉得触发器就像 javaScript 中的事件, 点击事件也好, 鼠标移入移出事件也罢, 也就是说不需要我们手动的去启动它, 只是将事件设好, 当他根据某一行为执行这些事件的开始(这儿也就是触发器), 有了触发器我们完全可以在执行第一条 sql 语句的时候, 触发也去执行第二条语句(当然这儿涉及到了触发器的分类)

三, 触发器的分类    

DDL 触发器

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

 DML 触发器

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

例: 建立一个触发器, 当职工表执行删除一条记录的时候, 把被删除的记录添加删除日志表里

  替代触发器

INSTEAD OF 触发器又称为替代触发器,用于执行一个替代操作来代替触发事件的操
作。例如:针对 INSERT 事件的 INSTEAD OF 触发器,它由 INSERT 语句触发,当出现 INSERT
语句时,该语句不会被执行,而是执行 INSTEAD OF 触发器中定义的语句。
创建 INSTEAD OF 触发器需要注意以下几点:
                  只能被创建在视图上,并且该视图没有指定 WITH CHECK OPTION 选项。
                  不能指定 BEFORE 或 AFTER 选项。  FOR EACH ROW 子可是可选的,即                                  INSTEAD OF 触发器只能在行级上触发、或只能是行级触发器,没有必要指定。
                  没有必要在针对一个表的视图上创建 INSTEAD OF 触发器,只要创建 DML 触发器就                   可以了。

系统事件触发器:                           

            登录触发器:

                          例:  创建登陆, 退出触发器

四, 触发器的究极作用

          可在写入数据表前,强制检验或转换数据。

          触发器发生错误时,异动的结果会被撤销。

  部份数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为 DDL 触发器。

  可依照特定的情况,替换异动的指令 (INSTEAD OF)。

五. 触发器的应用

       1. 确保数据库的安全性

可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据。
可以基于数据库中的数据限制用户的操作,例如不允许价格的升幅一次超过 10%。

       2. 实施复杂的安全性授权

利用触发器控制实体的安全性,可以将权限藉于各种数据库的值。

       3. 提供复杂的审计功能

审计用户操作数据库的语句。
把用户对数据库的更新写入审计表。

       4. 维护不同数据库之间同步表

在不同的数据库之间可以利用快照来实现数据的复制,但有些系统要求两个数据库数据
实时同步,就必须利用触发器从一个数据库中向另一个数据库复制数据。

        5. 实现复杂的数据完整性规则

实现非标准的数据完整性检查和约束。触发器可产生比规则更为复杂的限制。与规则不
同,触发器可以引用列或数据库对象。
提供可变的缺省值。

        6. 实现复杂的非标准的数据库相关完整性规则

触发器可以对数据库中相关的表进行连环更新。例如,在 auths 表 author_code 列上的
删除触发器可导致相应删除在其它表中的与之匹配的行。
  触发器能够拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。当
插入一个与其主健不匹配的外部键时,这种触发器会起作用。

六. 触发器的组成

  触发器是由

触发事件(如增删改查).

触发时间(即增删改查发生之前还是之后).

触发操作(该 TRIGGER 被触发之后的目的和意图),

触发对象(包括表、视图、模式、数据库。只有在这些对象上发生了符合触发条件的触发事件,才会执行触发操作。).

触发条件(由 WHEN 子句指定一个逻辑表达式。只有当该表达式的值为 TRUE 时,遇到触发事件才会自动执行触发器,使其执行触发操作。).

触发频率 (说明触发器内定义的动作被执行的次数。即语句级(STATEMENT) 触发
器和行级(ROW) 触发器。)

七. 触发器的触发次序

1. 执行 BEFORE 语句级触发器;

2 对与受语句影响的每一行
   2.1   执行 BEFORE 行级触发器
   2.2 执行 DML 语句
   2.3  执行 AFTER 行级触发器
3.  执行 AFTER 语句级触发器

八. 触发器的优点

优:  触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约
束可以更有效地执行这些更改。触发器可以强制比用 CHECK 约束定义的约束更为复杂的
约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一
个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定
义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中
的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一
个修改语句.

缺:  触发器功能强大,轻松可靠地实现许多复杂的功能,但是它也具有一些缺点那
就是由于我们的滥用会造成数据库及应用程序的维护困难。在数据库操作中,我们可以通过
关系、触发器、存储过程、应用程序等来实现数据操作。同时规则、约束、缺省值也是保证
数据完整性的重要保障。如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加
了维护的复杂程序.

九. 编写触发器的注意事项

首先触发器是不接受参数的,

其次一个表上最多是可以有 12 个触发器的, 但是同一时间, 同一事件, 同一类型的触发器只能有一个, 并且触发器之间不能有矛盾,

当然一个表中的触发器越多, 对该表的 DML 操作的性能影响就越大, 触发器最大为 32kb,

若是确是需要, 可以先建立过程, 然后在触发器中用 call 语句进行调用,

在触发的执行部分只能用 DML 语句, 不能使用 DDL 语句

触发器中不能包含事务控制语句, 因为触发器是触发语句中的一部分, 触发语句被提交, 回滚时触发器也被提交或是回滚了,

在触发器主体中调用的任何过程, 函数, 都不能使用事务控制语句.

在触发器主体中不能申明任何 long 的 blob 变量, 新值 new 和旧值 oid 也不能向表中的任何 long 和 blob 列

不同类型的触发器的语法 格式和作用有较大区别

触发器声明变量附值方式的 dephi 类似, 使用:= 符号来赋值, 新值 new, 旧值 old 前面不要忘记: 引号符号.

关于“如何分析 sql 中的触发器”就介绍到这了, 更多相关内容可以搜索丸趣 TV 以前的文章,希望能够帮助大家答疑解惑,请多多支持丸趣 TV 网站!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计3268字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)