您好,登录后才能下订单哦!
这篇文章主要为大家分析了如何分析sql中的触发器的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“如何分析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中的触发器”就介绍到这了,更多相关内容可以搜索亿速云以前的文章,希望能够帮助大家答疑解惑,请多多支持亿速云网站!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。