第18章 触发器Word下载.docx
- 文档编号:21829437
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:13
- 大小:119.01KB
第18章 触发器Word下载.docx
《第18章 触发器Word下载.docx》由会员分享,可在线阅读,更多相关《第18章 触发器Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
18.5性能考虑
18.6推荐操作
实验
实验18-1:
创建触发器
实验18-2:
创建触发器以更新派生数据
实验18-3:
创建触发器以维护复杂的业务规则
实验18-4:
测试约束和触发器的触发顺序
习题
习题1-对应18.3触发器的工作过程
习题2-对应18.2定义触发器
习题3-对应本章综合知识
习题4-对应本章综合知识
习题5-对应本章综合知识
习题6-对应18.3触发器的工作过程
习题7-对应本章综合知识
教师光盘
实验文件
Labfiles\allfiles.exe
习题解答
tPrep\answer.doc
教学指导手册包
新版幻灯片
Powerpnt\PPT_2071_2073_18.ppt
先修知识
在正式开始学习本章内容以前,学生须具备下列知识基础。
知识基础
推荐补充
熟悉关系数据库基本概念
《数据库基础》
建议学时
课堂教学(4课时)+实验教学(4课时)
教学过程
教学提示:
本节主要达到两个目的。
●掌握什么是触发器。
(略讲)
●了解触发器的使用场景和考虑事项,触发器是SQLServer中的重要概念,在企业数据解决方案中往往要通过触发器实现比较复杂的业务规范和保证复杂的数据完整性。
(精讲)
内容
教学方法
提示
讲授:
触发器是一类特殊的存储过程,被定义为在对表或视图发出UPDATE、INSERT或DELETE语句时自动执行。
触发器是功能强大的工具,使每个站点可以在有数据修改时自动强制执行其业务规则。
触发器可以扩展SQLServer约束、默认值和规则的完整性检查逻辑,但只要约束和默认值提供了全部所需的功能,就应使用约束和默认值。
表可以有多个触发器。
CREATETRIGGER语句可以与FORUPDATE、FORINSERT或FORDELETE子句一起使用,指定触发器专门用于特定类型的数据修改操作。
当指定FORUPDATE时,可以使用IFUPDATE(column_name)子句,指定触发器专门用于具体某列的更新。
触发器可使公司的处理任务自动进行。
在库存系统内,更新触发器可以检测什么时侯库存下降到了需要再进货的量,并自动生成给供货商的定单。
在记录工厂加工过程的数据库内,当某个加工过程超过所定义的安全限制时,触发器会给操作员发电子邮件或寻呼。
触发器包含Transact-SQL语句,这与存储过程十分相似。
与存储过程一样,触发器也返回由触发器内的SELECT语句生成的结果集。
不建议在触发器中包含SELECT语句,但仅填充参数的语句除外。
这是因为用户不期望看到由UPDATE、INSERT或DELETE语句返回的结果集。
阅书:
18.1
幻灯:
第3-10页
●建议补充联机丛书内容
提问:
触发器的本质是什么?
就是T-SQL语句,除了使用方法不一样之外,别的和存储过程都极其类似。
●通过该问题加深学生对触发器的了解。
本节主要达到一个目的。
●掌握触发器的创建、修改和删除的方法。
(精讲+演示)
讲述:
我们在上面一节了解了触发器的基本概念和本质。
下面,我们来学习对它的具体操作方法。
讲授课本。
演示:
书上的例子
18.2
第12-16页
●适当补充联机丛书内容。
●掌握各种不同的触发器的工作过程和原理。
(精讲+演示)
设计触发器时,了解触发器的工作方式十分重要。
本节将讨论INSERT触发器、DELETE触发器、UPDATE触发器、嵌套触发器和递归触发器。
18.3
第18-31页
●需要补充联机丛书的内容。
●了解触发器的使用场景,这对企业数据库程序员十分重要,了解了使用场景,才能确定何时适合采用触发器。
触发器通常用在下面的场景:
1、强制数据完整性:
假设我们拥有一家网上书店。
网站需要在删除一个用户的同时将他的交易记录也同时全部删除,如果我们把相关代码放到应用程序中去,会造成今后系统维护和升级上的困难,很容易造成该段代码不小心被去掉,造成数据库数据的大量冗余。
一个比较好的选择就是使用触发器来删除关联数据。
2、强职业务规则:
触发器能实现比约束更加复杂的规则。
比如,我们的网上书店需要删除一本书的相关信息,因为这本书已经脱销了,网站也不准备继续进货了。
但是我们在删除时必须首先检查这本书是否已经被卖出过,否则就已经和订单关联,相关的信息不能被删除,删除动作需要回滚。
18.4
第33-35页
●建议同本章习题/实验结合起来讲。
●了解使用触发器时的性能考虑。
(略讲)
如果发生约束侵犯,则永远不会执行AFTER触发器,因此这些触发器不能用于任何可能防止约束侵犯的处理。
执行INSTEADOF触发器而不是通常的触发动作。
在创建将更改反映到基表的inserted和deleted表之后,但在执行任何操作之前执行这些触发器。
这些触发器在执行任何约束前执行,因此可执行预处理以补充约束操作。
如果某个表上定义的INSTEADOF触发器对该表执行一个通常将再次激发INSTEADOF触发器的语句,则将不递归调用该触发器。
相反,将视该表为没有INSTEADOF触发器来处理该语句,并启动约束操作与AFTER触发器执行之间的链。
例如,如果将触发器定义为一个表的INSTEADOFINSERT触发器,并且该触发器在同一表上执行INSERT语句,则由INSTEADOF触发器执行的INSERT语句不会再次调用该触发器。
该触发器执行的INSERT将启动这样的进程,执行约束操作并激发为表定义的任何AFTERINSERT触发器。
如果视图上定义的INSTEADOF触发器对该视图执行一个通常将再次激发INSTEADOF触发器的语句,则将不递归调用该触发器。
而是将该语句解析为对视图的基础基表的更改。
在这种情况下,视图定义必须满足对可更新视图的所有限制。
有关可更新视图的定义,请参见通过视图修改数据。
例如,如果将触发器定义为某个视图的INSTEADOFUPDATE触发器,并且该触发器执行引用该视图的UPDATE语句,则由INSTEADOF触发器执行的UPDATE语句不会再次调用该触发器。
在处理该触发器对视图执行的UPDATE语句时,将视图看作没有INSTEADOF触发器一样对待。
UPDATE更改的列必须解析到单个基表。
对基础基表所做的每个修改将启动应用约束和激发为表定义的AFTER触发器之间的链。
触发器的性能开销通常很低。
运行触发器的时间大部分都用于引用其它表,这些表可以在内存或数据库设备上。
Deleted和inserted表总是在内存中。
触发器所引用的其它表的位置确定操作所需的时间。
注意,由于存在对性能的潜在负面影响,不推荐在触发器中使用游标。
使用基于行集的逻辑而非游标来设计影响多行的触发器。
18.5
第37页
●了解一些经验做法。
讲授课本
18.6
第39页
总结
经过本章的学习,我们了解了下列的知识和内容。
●触发器的创建方法
●触发器的删除方法
●触发器的更改方法
●各种触发器如何工作
●影响使用触发器的性能因素
本章中,我们学习了保证复杂的数据完整性的手段——触发器,下一章,我们将学习分布式的基础,多服务器编程。
随堂练习
1.在图书馆系统中,有一张名为Policy数据表专门用于记录不同的图书借阅管理条例。
如果想要Policy中的每一条记录在输入时,系统都能自动分配一个条例号码,应当如何做?
A.使用INSTEADOFINSERT触发器产生一个条例号码
B.使用INSTEADOFUPDATE触发器产生一个条例号码
C.使用AFTERUPDATE触发器产生一个条例号码
D.使用AFTERINSERT触发器产生一个条例号码
正确答案:
A
分析:
在这道题中,需要使用一个约束来保证输入到某一列的数据唯一性。
这种要求可以通过触发器来实现。
使用INSTEADOFINSERT触发器可以替换INSERT语句执行时的常规操作。
在这道题中,INSTEADOFINSERT触发器将插入的数据替换为一个具有唯一性的数据。
2.在培训中心的数据库系统中有教师Teacher和Class两张数据表,在Teacher中的一列checkout表示该教师是否已经辞职签出。
Class表中的列TeacherID中出现的数据必须是Techer表中尚未签出的教师。
请问应当使用何种方法保证输入数据的合法性?
A.使用外键约束数据的合法性
B.使用INSERT触发器保证数据合法性
C.使用CHECK约束保证数据的合法性
D.使用自定义函数保证数据的合法性
B
触发器能够完成CHECK约束和FOREIGNKEY约束的功能。
如果可以的话,使用CHECK约束和FOREIGNKEY约束。
在这道题中,CHECK约束和FOREIGNKEY约束都不能满足需要。
因为两者都不能检查checkout列的值。
触发器却能检查其他表中的数据列。
3.在某个库存数据库系统中,使用Product表保存产品的信息,其中的列CatalogID保存产品种类。
为了保证添加的同一种类的产品不超过50种,应当如何保证数据不会超过最大值?
A.使用触发器验证数据
B.创建数据验证规则
C.使用CHECK约束验证数据
D.使用UPDATE视图和WITHCHECKOPTION选项验证数据
4.在俱乐部会员信息数据库系统中,有一张表用于登记会员的信息,其中包括列BirthDay保存会员的生日信息。
由于系统需要经常查询生日信息,发出生日祝贺邮件,因此要保证登记时输入生日信息,如果输入为空,提示出错信息。
应当如何设计数据库以满足该设计需求?
A.在BirthDay列上添加CHECK约束
B.在BirthDay上创建数据验证规则
C.使BirthDay列不能为空
D.创建触发器验证BirthDay列的输入
D
触发器是一种特殊的存储过程并且在对一个数据表和视图执行UPDATE,INSERT,DELETE语句时自动执行。
触发器还能够在数据修改时执行业务逻辑以及检查完整性。
在本题中,CHECK约束不能返回自定义的出错信息。
5.证券信息公司的数据库提供了大量的股市价格信息,使用两张数据表记录相应的数据CurrentPrice和PastPrice分别记录当前股票价格和历史价格。
下面是两张表的结构:
以及两张表中存储的数据:
无论数据是否变化,所有的CurrentPrice中的数据每天更新。
现在要在更新时将变化的价格保存到PastPrice中。
请问下列选项中的哪一个实现这种设计需求?
A.在CurrentPrice表中创建AFTER触发器比较插入表和删除表中原有数据,如发生变化则插出到PastPrice表中
B.在CurrentPrice表中创建AFTER触发器比较CurrentPrice表中的数据,如发生变化则插出到PastPrice表中
C.在CurrentPrice表中创建级联更新约束更新PastPrice
D.创建存储过程比较更新前后的值,如果不同更新PastPrice
在本题中,如果delete表中的值被更新,使用触发器比较delete表中的StockPrice列的数据和CurruentPrice表中的StockPrice列。
但两个数据不同时,触发器在PastPrice表中插入相应的记录。
6.在医院的存货控制系统中,将所有的一次性医疗用品的数量情况保存在数据库中的数据表中,每次使用时使用条形码扫描登记。
现在要求当数量少于最低数量后要通知管理员,请问下列选项中的哪一个满足实现需求?
A.创建存储过程更新数据表,当数量少于最低数量使用xp_logevent系统存储过程通知管理员
B.使用INSTEADOFUPDATE触发器。
当数量少于最低数量使用SQLAgentMail发送e-mail通知管理员
C.创建FORUPDATE触发器。
当数量少于最低数量使用xp_sendmail系统存储过程通知管理员
D.安排SQLServer作业每四个小时运行一次,并使用参数@notify_level_page=2,当数量少于最低数量返回false值,启动触发器通知管理员
C
FORUPDATE触发器检查INSERT和UPDATE语句提供的数据值。
再使用xp_sendmail存储过程发送邮件给定义好的接受者。
7.设计一个网上书店的数据库系统。
其中有Publisher和Book两张数据表,Book中的PublisherID列使用外键约束参考Publisher的PublisherID列。
现在连接两张表创建了一张视图。
如果应用程序想要对视图发出INSERT命令,应当如何做?
A.在视图上创建AFTER触发器
B.在视图上创建INSTEADOF触发器
C.在两张数据表上创建IINSTEADOF触发器
D.更改视图添加WITHCHECK选项
INSTEADOF触发器覆盖激活触发器的语句的常规动作。
它可以定义在表或视图之上。
INSTEADOF触发器对于扩展更新的类型十分有用并且提供了一种在一张视图上修改多表的方法。
布置作业
1.完成书后习题1-7
2.预习书中所有实验,并填写操作步骤。
在实验课上准备操作
案例教学
本章介绍了触发器,此时学生将重新检查第四章时完成的案例部分,是否有当时无法实现的功能,尝试设计并创建相应的触发器保证比较复杂情况下的数据完整性。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第18章 触发器 18