设为首页 收藏本站
查看: 608|回复: 0

[经验分享] 如何在SQL Server中使用触发器

[复制链接]

尚未签到

发表于 2016-11-4 07:57:52 | 显示全部楼层 |阅读模式
  触发器主要优点如下
    触发器是自动的:当对表中的数据作了任何修改之后立即被激活,触发器与数据库中的表紧密相关,比如当对表执行INSERT、UPDATE或DELETE操作时,触发器就会自动执行。
    触发器可以对数据库中的表进行嵌套的触发,一个触发器执行启动另一个触发器的操作,这样的嵌套可以达到32层。
    触发器可以强制限制,可以防止恶意或错误的 INSERT、UPDATE 以及 DELETE 操作,并强制执行比CHECK约束定义的限制更为复杂的其他限制,虽CHECK约束已经在表定义的时候建立好了,但触发器可以实现很多其它的约束限制,在约束所支持的功能无法满足应用程序的功能要求时,触发器的优点就会体现。
    在SQL Server中,已经包括两大类触发器:DML 触发器和 DDL 触发器。 DDL触发器为SQL Server 2005中新增的。
    当数据库中发生数据操作语言 (DML) 事件时将调用 DML 触发器。DML 事件包括在指定表或视图中修改数据的 INSERT 语句、UPDATE 语句或 DELETE 语句。DML 触发器可以查询其他表,还可以包含复杂的 Transact-SQL 语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到错误,则整个事务即自动回滚。
    DDL 触发器是一种特殊的触发器,它在响应数据定义语言 (DDL) 语句时触发。它们可以用于在数据库中执行管理任务,例如,审核以及规范数据库操作。像常规触发器一样,DDL 触发器将激发存储过程以响应事件。但与 DML 触发器不同的是,它们不会为响应针对表或视图的 UPDATE、INSERT 或 DELETE 语句而激发。相反,它们会为响应多种数据定义语言 (DDL) 语句而激发。这些语句主要是以 CREATE、ALTER 和 DROP 开头的语句。DDL 触发器可用于管理任务,例如审核和控制数据库操作。
    了解到以上内容,我们就来看一下如何来创建一个DML触发器和一个DDL触发器。
    在SQL Server 2000中我们创建触发器可以通过在表名上点右键->“所有任务”->“管理触发器”来创建,然后在里面写上对应的 T-SQL 语句,也可以在查询分析器里面创建。在SQL Server 2005中就不提供对应的表名进行操作了,需要直接通过写对应的T-SQL语句了。
    触发器的操作命令主要有如下几种格式:
    创建触发器:
    Create Trigger 名称
    On 表名
    For 类型
    As
    Sql语句
    修改触发器:
    Alter Trigger 名称
    删除触发器:
  
  Drop Trigger 名称
    先来看一个DML触发器:
    现在有两张表,一张是学生的基本信息表,一张是他所借书的表(表里面和学生基本信息表关联的是学号),现在业务如下:更改了学生的学号,同时也要更改所借书表的学号;该学生毕业后,删除他的学号时,同时也删除它的借书的记录。
    我们就来创建这样的触发器,先来描述更改学生的学号同时更改所借书的学号: 
  
  
Create Trigger TrgStudentInfoUpdate
On StudentInfo     --在StudentIno表中创建触发器
For Update         --为更新事件触发
As 
if Update(StudentNumber) --更新了学号后
Begin
      Update BorrowBook   --更新借书的记录表
      Set StudentNumber=StudentInfo.StudentNumber
      From BorrowBook , StudentInfo  
      Where BorrowBook.StudentNumber=StudentInfo.StudentNumber
End
  
       然后再来看看删除学号时同时删除它的借书记录:
  
  
Create trigger TrgStudentInfoDelete
On StudentInfo  --在StudentIno表中创建触发器
For Delete       --为删除事件触发
As
 Delete BorrowBook  --删除学生信息时同时删除他的借书记录表信息
 From BorrowBook, StudentInfo
 Where BorrowBook.StudentNumber=StudentInfo.StudentNumber
  
       以上就是DML的触发器,下面来看DDL的触发器,我们可以看SQL Server 2005自带的一个例子的用法:
  
  
CREATE TRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE –-在删除或对表进行更新时
AS
   PRINT 'You must disable Trigger "safety" to drop or alter tables!' –-提示信息
   ROLLBACK –-回滚
  
      以上示例说明了如何使用 DDL 触发器来防止数据库中的任一表被修改或删除,当任何一张表在被修改或删除的时候,都会触发到相应的事件。
    触发器在给我们带来操作方便的同时,也需要慎用它,如果过分的依赖触发器,很大程度上就会影响到数据库的结构,增加了维护的复杂度。
   

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-295457-1-1.html 上篇帖子: SQL Server中用convert函数转换日期格式 下篇帖子: sql server 2000的一些问题解决方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表