sql sever 数据库 入门- 触发器1.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
sql sever 数据库 入门- 触发器1

触发器 2005-6-1 触发器是一种特殊的存储过程,其特殊性在于它并不需要由用户直接调用,当对表进行插入、删除、修改等操作时自动执行。 触发器可以用来实施复杂的完整性约束,以防止对数据的不正确修改。 触发器不允许带参数、也不允许被调用。 触发器的优点 实现数据库中多张表的级联修改 实现比CHECK约束更为复杂的约束 检查修改前后表中的数据的不同 对表的修改更合乎业务规则。 触发器的触发方式 SQL SERVER 2000 按触发器被激活的时机分为后触发和替代触发方式 后触发: 当引起触发器执行的修改语句执行完成,并通过各种约束检查后,才执行触发器,这种触发方式称做后触发。后触发只能创建在表上,不能创建在视图上。 创建这种触发器用 AFTER 或 FOR 关键字来指定。 替代触发:引起触发器执行的修改语句停止执行,仅执行触发器,这种触发方式称为替代触发。触发器可以创建在表或视图上。 创建这种触发器用 INSTEAD OF 关键字来指定。 引起触发器执行的修改语句若违反了某种约束,后触发方式不会激活触发器,替代触发器方式会激活触发器。 原因是: 后触发必须在修改语句成功执行后才会激活触发器,当修改语句违反约束,而停止执行,所以不会激活触发器。 替代触发是用触发器的执行代替修改语句的执行。修改语句没执行,也不存在约束的检查,所以使用替代触发方式会激活触发器。 临时表 每个触发器被激活时,系统都为它自动创建两个临时表:INSERTED 和 DELETED 这两个表的结构总与激活触发器的表的结构相同,触发器执行完成后,与该触发器相关的这两个临时表也会被自动删除。用户可以用SELECT语句查询临时表的内容,但不能对它们进行修改 INSERTED:当执行INSERT语句向表中插入数据时,系统将数据插入表的同时,也把相应的数据插入到 INSERTED 这个临时表中。 DELETED:在执行DELETE语句删除表中数据时,系统将数据从表中删除的同时,自动把删除的数据插入到 DELETED 这个临时表中。 执行UPDATE 修改表时,系统先从表中删除原有的行(放在DELETED中),然后插入新行(放在INSERTED中)。 创建触发器 CREATE TRIGGER 语句 格式:CREATE TRIGGER 触发器名称 ON 表|视图名称 [WITH ENCRYPTION] { FOR | AFTER | INSTEAD OF } { [DELETE] [,] [INSERT] [,] [UPDATE] } AS SQL 语句 格式说明: 1)AFTER | for 指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。 使用FOR与AFTER完全相同,早期版本中只能使用FOR。 不能在视图上定义 AFTER 触发器 3) { [DELETE] [,] [INSERT] [,] [UPDATE] } 是指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。必须至少指定一个选项。在触发器定义中允许使用以任意顺序组合的这些关键字。如果指定的选项多于一个,需用逗号分隔这些选项。 对于 INSTEAD OF 触发器,不允许在具有 ON DELETE 级联操作引用关系的表上使用 DELETE 选项。同样,也不允许在具有 ON UPDATE 级联操作引用关系的表上使用 UPDATE 选项 4) WITH ENCRYPTION 加密 syscomments 表中包含 CREATE TRIGGER 语句文本的条目。使用 WITH ENCRYPTION 可防止将触发器作为 SQL Server 复制的一部分发布。 注意 1)create trigger 语句必须是批处理中的第一条语句。 2)创建触发器的权限默认属于表的所有者,而且不能在授权他人。 3)只能在当前数据库中创建触发器,但触发器可以引用其他数据库的对象。 一个表上可以建立不同名称的、类型各异的触发器,但每个触发器只能作用在一个表上。 4)通常不要在触发器中返回任何结果,因此不要在触发器定义中使用SELECT语句或变量赋值语句。如果必须使用,请在触发器定义的开始部分使用SET NOCOUNT语句来避免返回结果。 5)大部分SQL语句都可以用在触发器中,但也有一些限制 例如:所有建立和修改数据库(及其对象)的语句; 所有DROP语句 等 都不

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档