您好,欢迎访问三七文档
1第10章存储过程触发器11.1练习题11及参考答案1.什么是触发器?其主要功能是什么?答:触发器是一种实施复杂数据完整性的特殊存储过程,在对表或视图执行UPDATE、INSERT或DELETE语句时自动触发执行,以防止对数据进行不正确、未授权或不一致的修改。触发器主要用于保持数据完整性、检查数据有效性、实现数据库管理任务和一些附加的功能。2.触发器分为哪几种?答:触发器分为DML和DDL触发器:DML触发器:是在执行数据操作语言事件时被调用的触发器,其中数据操作语言事件包括:INSERT、UPDATE和DELETE语句。触发器中可以包含复杂的T-SQL语句,触发器整体被看作一个事务,可以进行回滚。DDL触发器:它也是一种特殊的存储过程,由相应的事件触发后执行。与DML不同的是,它相应的触发事件是由数据定义语言引起的事件,包括CREATE、ALTER和DROP语句。DDL触发器用于执行数据库管理任务,如调节和审计数据库运转。DDL触发器只能在触发事件发生后才会调用执行,即它只能是AFTER类型的。3.INSERT触发器、UPDATE触发器和DELETE触发器有什么不同?答:它们的主要区别是触发的事件不同,INSERT触发器由INSERT操作所触发执行;UPDATE触发器由UPDATE操作所触发执行;DELETE触发器由DELETE操作所触发执行。4.AFTER触发器和INSTEADOF触发器有什么不同?答:两者的区别如下:AFTER触发器:在执行了INSERT、UPDATE或DELETE语句操作之后执行第章11112第10章存储过程AFTER触发器。指定AFTER与指定FOR相同,它是SQLServer早期版本中唯一可用的选项。AFTER触发器只能在表上指定。一个表可以有多个AFTER触发器INSTEADOF触发器:执行INSTEADOF触发器代替通常的触发动作。还可为带有一个或多个基表的视图定义INSTEADOF触发器,而这些触发器能够扩展视图可支持的更新类型。一个表只能具有一个给定类型的INSTEADOF触发器。5.创建DML触发器时需指定哪些项?答:创建DML触发器时需指定的项有:名称。定义触发器时所基于的表。触发器被触发的时间。激活触发器的数据修改语句。有效选项为INSERT、UPDATE或DELETE。多个数据修改语句可激活同一个触发器。例如,触发器可由INSERT或UPDATE语句激活。执行触发器操作的编程语句。11.2上机实验题10及操作过程在上机实验题9的factory数据库上,使用T-SQL语句完成如下各题:(1)在表depart上创建一个触发器depart_update,当更改部门号时同步更改worker表中对应的部门号。(2)在表worker上创建一个触发器worker_delete,当删除职工记录时同步删除salary表中对应职工的工资记录。(3)删除触发器depart_update。(4)删除触发器worker_delete。操作过程(1)建立触发器depart_update的程序如下::USEfactoryGOIFEXISTS(SELECTnameFROMsysobjectsWHEREtype='TR'ANDname='depart_update')DROPTRIGGERdepart_updateGOCREATETRIGGERdepart_updateONdepartFORUPDATEASDECLARE@olddepnoint,@newdepnointSELECT@olddepno=部门号FROMdeletedSELECT@newdepno=部门号FROMinsertedUPDATEworker3第10章存储过程SET部门号=@newdepnoWHERE部门号=@olddepnoGO执行下列语句,可验证存储过程的正确性:USEfactoryGOPRINT'将部门号101改为105'UPDATEdepartSET部门号=105WHERE部门号=101GOSELECT职工号,姓名,部门号FROMworkerGOPRINT'将部门号105改为101'UPDATEdepartSET部门号=101WHERE部门号=105GOSELECT职工号,姓名,部门号FROMworkerGO执行结果如下:将部门号101改为105职工号姓名部门号-------------------------------1孙华10510陈涛10211刘欣10512李涵10313王小燕10514李艺10315魏君1032孙天奇1023陈明1024李华1035余慧1036欧阳少兵1037程西1058张旗1029刘夫文102将部门号105改为101职工号姓名部门号-------------------------------1孙华10110陈涛10211刘欣1014第10章存储过程12李涵10313王小燕10114李艺10315魏君1032孙天奇1023陈明1024李华1035余慧1036欧阳少兵1037程西1018张旗1029刘夫文102(2)建立触发器worker_delete的程序如下::USEfactoryGOIFEXISTS(SELECTnameFROMsysobjectsWHEREtype='TR'ANDname='worker_delete')DROPTRIGGERworker_deleteGOCREATETRIGGERworker_deleteONworkerFORDELETEASDECLARE@nointSELECT@no=职工号FROMdeletedDELETEFROMsalaryWHERE职工号=@noGO执行下列语句,可验证存储过程的正确性:USEfactoryGOPRINT'删除前的工资记录'SELECT*FROMsalaryGODELETEFROMworkerWHERE职工号=15GOPRINT'删除职工号为15的职工记录后的工资记录'SELECT*FROMsalaryGO执行结果如下:删除前的工资记录职工号姓名日期工资-------------------------------------------------1孙华2004-01-0400:00:00.0001201.51孙华2004-02-0400:00:00.0001206.510陈涛2004-01-0400:00:00.0001245.85第10章存储过程10陈涛2004-02-0400:00:00.0001250.811刘欣2004-01-0400:00:00.000125011刘欣2004-02-0400:00:00.000125512李涵2004-01-0400:00:00.000134512李涵2004-02-0400:00:00.000135013王小燕2004-01-0400:00:00.000120013王小燕2004-02-0400:00:00.000120514李艺2004-01-0400:00:00.0001000.614李艺2004-02-0400:00:00.0001005.615魏君2004-01-0400:00:00.000110015魏君2004-02-0400:00:00.00011052孙天奇2004-01-0400:00:00.0009002孙天奇2004-02-0400:00:00.0009053陈明2004-01-0400:00:00.0001350.63陈明2004-02-0400:00:00.0001355.64李华2004-01-0400:00:00.0001500.54李华2004-02-0400:00:00.0001505.55余慧2004-01-0400:00:00.0007255余慧2004-02-0400:00:00.0007306欧阳少兵2004-01-0400:00:00.00010856欧阳少兵2004-02-0400:00:00.00010857程西2004-01-0400:00:00.000750.87程西2004-02-0400:00:00.000755.88张旗2004-01-0400:00:00.0007288张旗2004-02-0400:00:00.0007339刘夫文2004-01-0400:00:00.0002006.89刘夫文2004-02-0400:00:00.0002011.8删除职工号为15的职工记录后的工资记录职工号姓名日期工资-------------------------------------------------1孙华2004-01-0400:00:00.0001201.51孙华2004-02-0400:00:00.0001206.510陈涛2004-01-0400:00:00.0001245.810陈涛2004-02-0400:00:00.0001250.811刘欣2004-01-0400:00:00.000125011刘欣2004-02-0400:00:00.000125512李涵2004-01-0400:00:00.000134512李涵2004-02-0400:00:00.000135013王小燕2004-01-0400:00:00.000120013王小燕2004-02-0400:00:00.000120514李艺2004-01-0400:00:00.0001000.614李艺2004-02-0400:00:00.0001005.62孙天奇2004-01-0400:00:00.0009002孙天奇2004-02-0400:00:00.0009053陈明2004-01-0400:00:00.0001350.63陈明2004-02-0400:00:00.0001355.64李华2004-01-0400:00:00.0001500.54李华2004-02-0400:00:00.0001505.56第10章存储过程5余慧2004-01-0400:00:00.0007255余慧2004-02-0400:00:00.0007306欧阳少兵2004-01-0400:00:00.00010856欧阳少兵2004-02-0400:00:00.00010857程西2004-01-0400:00:00.000750.87程西2004-02-0400:00:00.000755.88张旗2004-01-0400:00:00.0007288张旗2004-02-0400:00:00.0007339刘夫文2004-01-0400:00:00.0002006.89刘夫文2004-02-0400:00:00.0002011.8(3)删除触发器depart_update的程序如下::USEfactoryGODROPTRIGGERdepart_updateGO(4)删除触发器worker_delete的程序如下::USEfactoryGODROPTRIGGERworker_deleteGO
本文标题:第11章-触发器
链接地址:https://www.777doc.com/doc-5754917 .html