- 1、本文档共53页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SQL Server--chap10--第十章 触发器及其应用 类型: DDL(Data Definition Language)数据定义语言触发器 DML(Data Manipulation Language)数据操作语言触发器 Deleted表和 Inserted SQL Server为每个触发器都创建了两个专用表:INSERTED表和DELETED表。这两个逻辑表,由系统来维护。用户不能对它们进行修改。它们存放在内存中而不是数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行完成后,与该触发器相关的这两个表也被删除。 DELETED表 存放由于执行DELETE或UPDATE语句而要从表中删除的所有行。在执行DELETE或UPDATE操作时,被删除的行从激活触发器的表中被移动到DELETED表,这两个表不会有共同的行。 INSERTED表 存放由于执行INSERT或UPDATE语句而要向表中插入的所有行。在执行INSERT或UPDATE操作时,新的行同时添加到激活触发器的表和INSERTD表中, INSERTD表的内容是激活触发器的表中新行的备份。 可以通过指定WITH ENCRYPTION来对触发器的定义文本信息进行加密,加密后的触发器无法用sp_helptext查看相关信息 还可使用系统存储过程sp_helptrigger来查看某特定表上存在的触发器的某些信息 ? EXEC sp_helptrigger tablename 例:用系统存储过程sp_helptrigger 查看表authors上存在的所有触发器的相关信息 ? USE pubs EXEC sp_helptrigger authors go 2. 使用系统表 例:用系统表sysobjects查看数据库pubs上的所有触发器的相关信息 ? USE pubs SELECT name from sysobjects WHERE type=TR go 9.3.1 使用触发器强制数据完整性 约束和触发器都可以用来实施数据完整性,但两者各有优势 触发器的可以包含使用 T-SQL 代码的复杂处理逻辑 触发器可以支持约束的所有功能 9.3使用触发器 实体完整性应在最低级别上通过索引进行强制,这些索引或是 PRIMARY KEY和UNIQUE约束的一部分,或是在约束之外独立创建的 域完整性应通过CHECK约束来强制 引用完整性应通过FOREIGN KEY 约束来强制 以下应用场合应考虑使用触发器: 除非REFERENCES子句定义了级联引用操作,否则FOREIGN KEY约束只能以与另一列中的值完全匹配的值来验证列值 应用程序要求根据另一表中的列验证列值 应用程序要求使用自定义信息和较为复杂的错误处理 * * 第九章 触发器及其应用 9.1.1触发器的基本概念 9.1触发器概述 数据库触发器是一种在基表被修改时自动执行的内嵌过程,当使用UPDATE、INSERT或DELETE命令在指定表中对数据进行修改时,用来防止对数据进行的不正确或不一致的修改 通过触发器可以把事务规则从应用程序代码移到数据库中从而确保事务规则被遵守,并能显著提高性能 9.1.2使用触发器的优点 1. 强制比CHCEK约束更复杂的数据完整性 在CHECK约束中不允许引用其他表中的列来完成检查工作,而触发器则可以引用其他表中的列来完成数据完整性的约束 进出货:存货量定购量 2. 使用自定义的错误信息 用户有时需要在数据完整性遭到破坏或其他情况下,发出预先自定义好的错误信息或动态自定义的错误信息 3. 实现数据库中多张表的级联修改 在titleauthor、sales及roysched表中对各匹配行进行定位删除 title_id列 titles表 在title_id列上定义一个删除触发器 titleauthor表 sales表 roysched表 此三列均有title_id字段 4. 比较数据库修改前后数据的状态 用户可在触发器中引用由于修改所影响的记录行 触发器 提供 访问由INSERT、UPDATE或DELETE语句引起的数据变化的前后状态 5. 维护非规范化数据 非规范数据通常是指在表中的派生的、冗余的数据值 维护非规范化数据应该通过使用触发器来实现 表的级联是指不同表之间的主外键关系,维护表的级联可通过设置表的主键与外键的关系来实现 注意区别 9.2 触发器的创建 CREATE TRIGGER [owner.]trigge_name ON [owner.]{table|view} {FOR|AFTER|INSTEAD OF} {[INSERT],[UPDATE
文档评论(0)