【个人学习笔记18之--浅谈触发器】

这次谈的是触发器


Microsoft SQL Server 提供两种主要机制来强制使用业务规则和数据完整性:约束和触发器。

关于触发器和约束用谁比较好,这主要看业务的逻辑复杂程度.
如果你的处理逻辑比较简单,并且可以用一些简单的约束来处理,则应该尽量使用PRIMARY KEY ,UNIQUE CHECK这些约束.
当约束支持的功能无法满足应用程序的功能要求时,DML 触发器非常有用 例如:
1.除非 REFERENCES 子句定义了级联引用操作,否则 FOREIGN KEY 约束只能用与另一列中的值完全匹配的值来验证列值
2.约束只能通过标准化的系统错误消息来传递错误消息。如果应用程序需要(或能受益于)使用自定义消息和较为复杂的错误处理,则必须使用触发器。
3.DML 触发器可以防止恶意或错误的 INSERT、UPDATE 以及 DELETE 操作,并强制执行比 CHECK 约束定义的限制更为复杂的其他限制。
 check约束只能检查引用表内的列,当涉及外表的一些规则时候 需要在本表里使用trigger.
4.如果触发器表上存在约束,则在 INSTEAD OF 触发器执行后但在 AFTER 触发器执行前检查这些约束。
  如果违反了约束,则回滚 INSTEAD OF 触发器操作并且不执行 AFTER 触发器。
5.一个表中的多个同类 DML 触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的操作来响应同一个修改语句。

 

 

触发器分类:(- -|| 这个分类 可能是错的 )
1.DDL触发器:当服务器或数据库中发生数据定义语言 (DDL) 事件时将调用 DDL 触发器
2.登录触发器:将为响应 LOGON 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。
3.DML触发器:当数据库中发生数据操作语言 (DML) 事件时将调用 DML 触发器
 这个类型触发器还可以分成:
 AFTER 触发器:在执行了INSERT、UPDATE 或 DELETE 语句操作之后执行 AFTER 触发器(指定 AFTER 与指定 FOR 相同)
 INSTEAD OF 触发器 :执行 INSTEAD OF 触发器代替通常的触发动作。还可为带有一个或多个基表的视图定义 INSTEAD OF 触发器
 clr触发器:CLR 触发器可以是 AFTER 触发器或 INSTEAD OF 触发器。CLR 触发器还可以是 DDL 触发器。
      CLR 触发器将执行在托管代码(在 .NET Framework 中创建并在 SQL Server 中上载的程序集的成员)中编写的方法
      
先来说说我们最常用的DML触发器

这里只介绍DML中的 AFTER触发器和INSTEAD OF触发器.
首先列出2者的不同点:
函数                                                            AFTER 触发器                                                            INSTEAD OF 触发器 
~适用范围                                                          表                                                                            表和视图

~每个表或视图包含触发器的数量         每个触发操作(UPDATE、DELETE 和 INSERT)                   每个触发操作(UPDATE、DELETE 和 INSERT)
                                                                  包含多个触发器                                                             包含一个触发器
                                         
~级联引用                                                   无任何限制条件                                                    不允许在作为级联引用完整性约束目标的表上使用
                                                                                                                                            INSTEAD OF UPDATE 和 DELETE 触发器
~执行                                          晚于:  约束处理                                                               早于:   约束处理
                                                            声明性引用操作                                                       替代:  触发操作
                                                            创建插入的和删除的表(反映对基表所做的更改)              晚于:  创建插入的和删除的表(反映对基表所做的更改)
                                                            触发操作
                                          
~执行顺序                                             可指定第一个和最后一个执行                                           不适用

~插入的和删除的表中的 varchar(max)                 允许                                                           允许
 nvarchar(max) 和 varbinary(max) 列引用。
                                                                 
~插入的和删除的表中的 text、ntext                 不允许                                                          允许
 和 image 列引用。
 
~ 递归性                                                                可以                                             在内部再次触发该触发器后不会再递归触发,但是可以触发
                                                                                                                                        将启动一系列约束操作和 AFTER 触发器执行    

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值