db-chapter05之触发器.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《db-chapter05之触发器.ppt》由用户(hwpkd79526)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- db_chapter05 触发器
- 资源描述:
-
1、数据库系统概论第5章 触发器的应用触发器的概述触发器的概述触发器的创建触发器的创建触发器的维护触发器的维护触发器的应用触发器的应用数据库系统概论触发器概述 Microsoft SQL Server 2000 提供了两种主要机制来强制提供了两种主要机制来强制业务规则和数据完整性:业务规则和数据完整性:约束和触发器。约束和触发器。约束是实现完整性要求约束是实现完整性要求高效且实用高效且实用的重要方法,但(除了外的重要方法,但(除了外键约束)只能涉及一个表,当根据需要涉及多表键约束)只能涉及一个表,当根据需要涉及多表Check约束时,约束时,就无法用就无法用Check约束来解决。约束来解决。触发器是
2、一种特殊类型的存储过程,它在指定表中的数据发触发器是一种特殊类型的存储过程,它在指定表中的数据发生变化时自动生效,唤醒调用触发器以响应生变化时自动生效,唤醒调用触发器以响应 INSERT、UPDATE 或或 DELETE 语句。触发器可以操作其它表,并可以包含复杂的语句。触发器可以操作其它表,并可以包含复杂的 Transact-SQL 语句。所以触发器可以用来对表实施更加复杂的完语句。所以触发器可以用来对表实施更加复杂的完整性约束,当触发器表所保存的数据发生改变时,触发器会自动整性约束,当触发器表所保存的数据发生改变时,触发器会自动激活,从而防止对数据的不正确更新。激活,从而防止对数据的不正确
3、更新。数据库系统概论触发器的概述1 触发器概述触发器概述2 触发器的作用触发器的作用3 触发器与约束的区别触发器与约束的区别4 触发器的类型触发器的类型5 Inserted表和表和Deleted表表数据库系统概论 触发器的概述1 触发器概述触发器概述 在在SQL Server中一张表可以有多个触发器,用户可以针中一张表可以有多个触发器,用户可以针对更新表操作(对更新表操作(INSERT、UPDATE、DELETE)分别设置)分别设置触发器,也可以针对一张表上的特定操作设置多个触发器。触发器,也可以针对一张表上的特定操作设置多个触发器。尽管触发器可以容纳非常复杂的尽管触发器可以容纳非常复杂的T-
4、SQL语句,但是不语句,但是不管触发器所进行的操作有多复杂,管触发器所进行的操作有多复杂,SQL Server将触发器和将触发器和触发它的语句作为可在触发器内回滚的单个事务对待触发它的语句作为可在触发器内回滚的单个事务对待。数据库系统概论 触发器的概述2 触发器的作用触发器的作用 触发器可通过数据库中的相关表实现级联更改;触发器可通过数据库中的相关表实现级联更改;不过,通过级联参照完整性约束可以更有效地执行不过,通过级联参照完整性约束可以更有效地执行这些更改。但是在某些应用环境,必须使用触发器这些更改。但是在某些应用环境,必须使用触发器来操作。来操作。触发器可以实现比用触发器可以实现比用 CH
5、ECK 约束定义的约束约束定义的约束更为复杂的约束,触发器可以引用其它表中的列,更为复杂的约束,触发器可以引用其它表中的列,即多表约束规则。即多表约束规则。数据库系统概论 触发器的概述v 触发器也可以评估数据更新前后的表状态,并触发器也可以评估数据更新前后的表状态,并根据其差异采取对策。根据其差异采取对策。v 在一个表同一类型的操作(在一个表同一类型的操作(INSERT、UPDATE 或或 DELETE)上设置多个触发器,从而可以针对)上设置多个触发器,从而可以针对不同的更新语句执行多种不同的操作不同的更新语句执行多种不同的操作。数据库系统概论 触发器的概述3 触发器与约束的区别触发器与约束的
6、区别 约束和触发器在特殊情况下各有优势。触发器的主要好约束和触发器在特殊情况下各有优势。触发器的主要好处在于它们可以包含使用处在于它们可以包含使用 Transact-SQL 代码的复杂处理逻代码的复杂处理逻辑。因此,辑。因此,触发器可以支持约束的所有功能;但它在所给出触发器可以支持约束的所有功能;但它在所给出的功能上并不总是最好的方法。的功能上并不总是最好的方法。SQL Server帮助中建议:帮助中建议:假设功能可以满足应用程序的假设功能可以满足应用程序的功能需求,实体完整性要求应通过功能需求,实体完整性要求应通过Primary Key约束、约束、Unique约束等进行强制,用户定义完整性应
7、通过约束等进行强制,用户定义完整性应通过 CHECK 约束进行强制,参照完整性约束进行强制,参照完整性(RI)则应通过则应通过 FOREIGN KEY 约束进行强制。约束进行强制。数据库系统概论触发器的概述 在约束所支持的功能无法满足应用程序的功能要求在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。主要表现在以下几个方时,触发器就极为有用。主要表现在以下几个方面:面:CHECK 约束中逻辑表达式只能涉及表内约约束中逻辑表达式只能涉及表内约束。如果应用程序要求需要多表之间列值约束,束。如果应用程序要求需要多表之间列值约束,则必须使用触发器。则必须使用触发器。约束只能通过标准的系
8、统错误信息传递错约束只能通过标准的系统错误信息传递错误信息。如果应用程序要求使用(或能从中获益)误信息。如果应用程序要求使用(或能从中获益)自定义信息和较为复杂的错误处理,则必须使用自定义信息和较为复杂的错误处理,则必须使用触发器。触发器。数据库系统概论 触发器的概述 触发器可以禁止或回滚违反参照完整性的更触发器可以禁止或回滚违反参照完整性的更改,从而取消所尝试的数据更新。改,从而取消所尝试的数据更新。如果触发器表上存在约束,则在如果触发器表上存在约束,则在 INSTEAD OF 触发器执行后但在触发器执行后但在 AFTER 触发器执行前检查触发器执行前检查这些约束。如果约束破坏,则回滚这些约
9、束。如果约束破坏,则回滚 INSTEAD OF 触发器操作并且不执行触发器操作并且不执行 AFTER 触发器。触发器。数据库系统概论 触发器的概述4 触发器的类型触发器的类型 SQL2000提供两种类型的触发器:提供两种类型的触发器:Instead Of触发器和触发器和After触发器。这两种触发器的区别在于它们触发的时机以触发器。这两种触发器的区别在于它们触发的时机以及进行的操作不同。及进行的操作不同。AFTER 触发器:在触发器:在触发操作执行后和处理完任何约束触发操作执行后和处理完任何约束后后激发。可通过指定激发。可通过指定 AFTER 或或 FOR 关键字来请求关键字来请求 AFTER
10、 触发器。因为触发器。因为 FOR 关键字与关键字与 AFTER 的效果相同,所以具的效果相同,所以具有有 FOR 关键字的触发器也归类为关键字的触发器也归类为 AFTER 触发器。触发器。AFTER触发器只能作用于基本表。触发器只能作用于基本表。数据库系统概论 触发器的概述 INSTEAD OF 触发器:触发器:代替触发动作进行激发,代替触发动作进行激发,并在处理约束之前激发并在处理约束之前激发。除了基本表以外,除了基本表以外,INSTEAD OF触发器也可以作用于视图,主要用触发器也可以作用于视图,主要用来扩展视图支持的更新操作。来扩展视图支持的更新操作。对于每个触发操作(对于每个触发操作
11、(UPDATE、DELETE 和和 INSERT),每个表或视图只能有一个),每个表或视图只能有一个 INSTEAD OF 触发器,而一个表对于每个触发操作可以有多触发器,而一个表对于每个触发操作可以有多个个 AFTER 触发器。触发器。注意:注意:在含有级联删除或级联更新操作定义的外在含有级联删除或级联更新操作定义的外键所在的表上,不能定义键所在的表上,不能定义 INSTEAD OF DELETE 触发器和触发器和 INSTEAD OF UPDATE 触发器。触发器。数据库系统概论 触发器的概述5 Inserted表和表和Deleted表表 SQL Server为每个触发器语句都自动创建了两
12、种特殊的为每个触发器语句都自动创建了两种特殊的表:表:DELETED 表和表和 INSERTED 表表。这两个逻辑表的结构。这两个逻辑表的结构总是与触发器所作用的表的结构相同总是与触发器所作用的表的结构相同,但是它们存放于内存,但是它们存放于内存而不是数据库中。我们可以使用这两个临时的驻留内存的表而不是数据库中。我们可以使用这两个临时的驻留内存的表测试某些数据更新的效果及设置触发器操作的条件,然而测试某些数据更新的效果及设置触发器操作的条件,然而不不能直接对表中的数据进行更改能直接对表中的数据进行更改。触发器执行完成后,。触发器执行完成后,SQL Server自动删除与该触发器相应的自动删除与
13、该触发器相应的DELETED 表和表和 INSERTED表。表。数据库系统概论 触发器的概述 inserted 和和 deleted 表主要用于触发器中:表主要用于触发器中:扩展表间参照完整性。扩展表间参照完整性。在以视图为基础的基表中插入或更新数据。在以视图为基础的基表中插入或更新数据。检查错误并基于错误采取行动。检查错误并基于错误采取行动。找到数据更新前后表状态的差异,并基于此找到数据更新前后表状态的差异,并基于此差异采取行动。差异采取行动。数据库系统概论 触发器的概述 Deleted 表用于存储表用于存储 DELETE 和和 UPDATE 语句所语句所影响的行的影响的行的副副本。在执行本
14、。在执行 DELETE 或或 UPDATE 语句语句时,行从触发器表中删除,并传输到时,行从触发器表中删除,并传输到 deleted 表中。表中。Deleted 表和触发器表通常没有相同的行(但表和触发器表通常没有相同的行(但Instead Of触发器可能出现两个表中有相同的行的情况)。触发器可能出现两个表中有相同的行的情况)。数据库系统概论触发器的概述 Inserted 表用于存储表用于存储 INSERT 和和 UPDATE 语句所语句所影响的行的副本。在一个插入或更新事务处理中,影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到新建行被同时添加到 inserted 表和触发器表
15、中。表和触发器表中。Inserted 表中的行是触发器表中新行的副本。表中的行是触发器表中新行的副本。修改事务类似于在修改事务类似于在删除之后执行插入删除之后执行插入;首先旧;首先旧行被复制到行被复制到 deleted 表中,然后新行被复制到触发表中,然后新行被复制到触发器表和器表和 inserted 表中。表中。数据库系统概论触发器的概述SnoSnameSdept2010001HUA CS触发器表触发器表2010003 QIANG MA新元组新元组触发动作:插入触发动作:插入SnoSnameSdeptInserted表表2010003 QIANG MA数据库系统概论触发器的概述SnoSnam
16、eSdept 2010003QIANGMASnoSnameSdept DELETED表表触发器表触发器表2010001 HUA CS触发动作:删除触发动作:删除数据库系统概论触发器的概述SnoSnameSdept 2010003 QIANG MASnoSnameSdept SnoSnameSdept DELETED表表触发器表触发器表INSERTED表表2010001 HUA CS触发动作:修改触发动作:修改2010001 HUA CS2010002 HUA CS2010002 HUA CS数据库系统概论 触发器的创建1 创建之前应考虑的问题创建之前应考虑的问题2 创建触发器时需要确定的对象创
17、建触发器时需要确定的对象3 Create Trigger命令的语法以及参数意义说明命令的语法以及参数意义说明数据库系统概论 触发器的创建1 创建之前应考虑的问题创建之前应考虑的问题u 创建触发器的权限默认分配给表的所有者,且不能将该创建触发器的权限默认分配给表的所有者,且不能将该权限转给其他用户。权限转给其他用户。u 触发器为数据库对象,其名称必须遵循标识符的命名规触发器为数据库对象,其名称必须遵循标识符的命名规则。则。u 只能在当前数据库中创建触发器。只能在当前数据库中创建触发器。u 触发器可以引用临时表,但不能引用系统表。触发器可以引用临时表,但不能引用系统表。数据库系统概论 触发器的创建
展开阅读全文