关系数据库设计与应用(工作手册式) 实训报告答案 实训14 触发器_第1页
关系数据库设计与应用(工作手册式) 实训报告答案 实训14 触发器_第2页
关系数据库设计与应用(工作手册式) 实训报告答案 实训14 触发器_第3页
关系数据库设计与应用(工作手册式) 实训报告答案 实训14 触发器_第4页
关系数据库设计与应用(工作手册式) 实训报告答案 实训14 触发器_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实训14触发器实训目的1.掌握触发器的创建、修改和删除操作;2.掌握触发器的触发执行;3.理解触发器与约束的不同。实训重难点1.触发器的创建;2.触发器的执行原理(难点)。实训准备请附加数据库,相关操作详见实训6中的“实训准备”。除了使用约束来完成数据的用户自定义完整性,还可以使用触发器来实现用户自定义完整性。本书介绍了DML触发器,它有三种类型:INSERT触发器、UPDATE触发器和DELETE触发器。实训内容第一题【存储过程与触发器的比较】1.设计一个存储过程proc_update,当向零件表中修改某指定零件名称时,如果该零件在供应零件表中已有记录,则提示“该零件名称不能进行修改”,并拒绝修改,否则可以修改。参考答案:createprocedureproc_update@零件代号char(5),@零件名称varchar(50)asbeginifnotexists(select*from零件where零件代号=@零件代号)update零件set零件名=@零件名称where零件代号=@零件代号elseprint'该零件名称不能进行修改'end--调用过程:execproc_update'P01','新的零件名称'2.设计一个触发器trigger_update,当向零件表中修改零件名称时触发该触发器,如果该零件在供应零件表中已有记录,则该零件名称不能进行修改,否则可以修改。参考答案:createtriggertrigger_updateon零件forupdate--inserteddeletedasbegin ifupdate(零件名) beginifexists(select*from供应零件A innerjoininsertedonA.零件代号=inserted.零件代号)rollbacktransactionendend--调用:update零件set零件名='PP01'where零件代号='P08'第二题【触发器练习】1.在零件表中编写update触发器sc_update,将其修改前后的信息保存在SC_log表中:SC_log(id,零件代号,零件名称,规格,修改时间)。提示:请先创建SC_log表,字段类型参照零件表。参考答案:先创建SC_log表:createtablesc_log(idintidentity(1,1),零件代号char(5)notnull,零件名称varchar(50)notnull,规格char(8)notnull,修改时间datetime)--插入一条数据:insertintosc_log(零件代号,零件名称,规格,修改时间)values('P09','PP08','GG08','2022-04-1712:00:00')--查询sc_log表select*fromsc_log编写触发器:createtriggersc_updateon零件forupdate--deletedinsertedasbegininsertintosc_log(零件代号,零件名称,规格)select零件代号,零件名,规格fromdeletedinsertintosc_log(零件代号,零件名称,规格)select零件代号,零件名,规格frominsertedend--测试语句:update零件set规格='GG08'--查询sc_log表select*fromsc_log2.在工程表中编写update触发器gc_update,当修改“预算”字段时,如果修改后的预算超过100000元,则提示“预算已超上限”,修改不能实现,否则可以修改。参考答案:--创建触发器createtriggergc_updateon工程forupdate--deletedinsertedasbeginifupdate(预算)beginifexists(select*frominsertedwhere预算>100000) print'预算已超上限100000' rollbacktransactionendend--测试语句:update工程set预算=110000where工程代号='J01'3.以下两条语句的执行结果有何不同,为什么?UPDATE工程SET预算=110000WHERE工程代号='J01'UPDATE工程SET预算=120000WHERE工程代号='J01'参考答案:本题考查的是触发器和检查约束的用法,所以这里如果需要验证,可以给工程表加一个检查约束,然后执行后就有区别了。--添加一个检查约束:ALTERTABLE工程ADDCONSTRAINTCHK_预算CHECK(预算>=0AND预算<=110000)UPDATE工程SET预算=110000WHERE工程代号

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论