《第10章第2讲 触发器.ppt》由会员分享,可在线阅读,更多相关《第10章第2讲 触发器.ppt(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1第10章 存储过程和触发器触发器的使用第2讲复习:u存储过程的含义、优点u类型:系统存储过程、用户存储过程u创建存储过程:需要确定存储过程的三个组成部分:uu所有的所有的输入参数、传给调用程序的、传给调用程序的输出参数。uu被执行的针对数据库操作的语句,包括调用其被执行的针对数据库操作的语句,包括调用其它存储过程的语句它存储过程的语句(嵌套嵌套)。uu返回给调用程序的返回给调用程序的状态值,以指明调用是成功,以指明调用是成功或失败或失败(returereture n)n)2第10章 存储过程和触发器触发器的使用第2讲复习:u格式uCreate procedure p_cjp_cj 学号学号
2、char(6),(6),课程名课程名 output,成绩成绩 output as SQL SQL语句语句u调用存储过程uDeclare xhxh char(6),(6),kcmkcm char(16),(16),cj cj intuSet xhxh=020102uExec p_cjp_cj xhxh,kcmkcm output,cj cj outputuPrint .输入实参将学号传递给输入形参输出形参将课程名和成绩返回给输出实参3第10章 存储过程和触发器触发器的使用第2讲引:实现数据完整性三个方面:实现实现“实体完整性实体完整性”的方法的方法uuprimary keyprimary key
3、约束、约束、uniqueunique约束、标识列、惟一索引约束、标识列、惟一索引实现实现“域完整性域完整性”的方法的方法uuCheck Check 约束、规则对象、约束、规则对象、default default 约束、默认值对象、约束、默认值对象、not null not null 约束约束实现实现“参照完整性参照完整性”的方法的方法uuforeign keyforeign key约束约束请思考:请思考:uu当用户对表进行了相应的操作后,我们希望系统能自当用户对表进行了相应的操作后,我们希望系统能自动撤消该操作,并给出用户提示信息,请问能否用以动撤消该操作,并给出用户提示信息,请问能否用以上的
4、方法来实现?上的方法来实现?不能实现。因为约束只能进行简单条件的限制,对于复杂的条件,只能通过触发器来实现。4第10章 存储过程和触发器触发器的使用第2讲第10章 存储过程和触发器触发器的使用教学内容基础知识:1.1.触发器概述2.2.创建触发器3.3.触发(激活)触发器4.4.触发器的更新5.5.触发器的删除5第10章 存储过程和触发器触发器的使用第2讲第9章 存储过程和触发器 触发器的使用学习目标认知目标:uu理解触发器的概念和作用理解触发器的概念和作用uu了解触发器的触发方式了解触发器的触发方式uu了解了解insertedinserted和和deleteddeleted临时表临时表能力目
5、标:uu触发器的创建触发器的创建(重点重点)uu创建不同类型的触发器创建不同类型的触发器(难点难点)uu根据触发器的功能正确检验触发器的作用根据触发器的功能正确检验触发器的作用 (难点难点)6第10章 存储过程和触发器触发器的使用第2讲一、触发器概述1.触发器的概念含义uu是一种表或视图执行是一种表或视图执行insertinsert、deletedelete、updateupdate操作操作时,被时,被系统自动执行系统自动执行的特殊的的特殊的存储过程存储过程。创建触发器的目的uu对表实现复杂的数据完整性约束,以防止不正对表实现复杂的数据完整性约束,以防止不正确的操作。确的操作。7第10章 存储
6、过程和触发器触发器的使用第2讲一、触发器概述2.触发器的类型按触发器激活的时机不同,分为:按触发器激活的时机不同,分为:DMLDML(后)触发器(后)触发器(掌握掌握)vv只有执行了只有执行了insertinsert、deletedelete、updateupdate操作后操作后,才激发的触发器。才激发的触发器。DDLDDL(替代)触发器(替代)触发器(了解了解)vv不执行命令所定义的不执行命令所定义的insertinsert、deletedelete、updateupdate操作操作,而仅执行触而仅执行触发器中定义的代码。发器中定义的代码。按引起触发的事件不同,分为:按引起触发的事件不同,分
7、为:1.1.insertinsert触发器触发器2.2.deletedelete触发器触发器3.3.updateupdate触发器触发器8第10章 存储过程和触发器触发器的使用第2讲一、触发器概述3.临时表每个触发器被激活时,系统都为它自动创建两个临时表:uuinsertedinserted表表uudeleteddeleted表表临时表的特点:uu是是逻逻辑辑表表,由由系系统统来来维维护护,用用户户不不能能对对它它们们进进行修改。行修改。uu其其结构结构与与源表源表 (激活触发器的表激活触发器的表)结构相同结构相同uu触发器执行完成后,触发器执行完成后,该该临时表会临时表会自动被删除自动被删除
8、。9第10章 存储过程和触发器触发器的使用第2讲一、触发器概述3.临时表deleted 临时表的作用:uu存存放放执执行行deletedelete或或updateupdate语语句句后后,要要从从源源表表中中删删除的行除的行uu特点:源表和特点:源表和deletedelete表表不会有相同的行。不会有相同的行。inserted临时表的作用:uu存存放放执执行行insertinsert或或updateupdate语语句句后后,要要在在源源表表中中插插入的新行入的新行(新行同时插入了源表和新行同时插入了源表和insertedinserted表中表中)uu特点:源表和特点:源表和insertedin
9、serted表有相同的行。表有相同的行。10第10章 存储过程和触发器触发器的使用第2讲二、创建和激活触发器创建格式:ucreate trigger 触发器名触发器名 on 表名表名|视图名视图名 for|after|instead of insert,update,delete as SQL SQL语句语句 说明:uu1 1个表上可有多个触发器。个表上可有多个触发器。uu 每个触发器只能作用在一个表上。每个触发器只能作用在一个表上。vv指定了触发器激活的时机指定了触发器激活的时机vvforfor、afterafter创建后触发器创建后触发器vvinstead ofinstead of创建替代
10、触发器创建替代触发器激活触发器的事件类型激活触发器的事件类型11第10章 存储过程和触发器触发器的使用第2讲二、创建和激活触发器1.insert触发器实例1:在xscj库的xs_kc表上创建1个名为tr_insert_cj的触发器,当向xs_kc表进行插入操作时激发该触发器,并给出提示信息“有新成绩插入到xs_kc表中!”create trigger tr_insert_cj on xs_kc after insert as print 有新成绩信息插入到xs_kc表!goinsert into xs_kc values(020105,101,87,null)说明:该语句执行后,会激活触发器,
11、显示提示信息。当再执行一次该插入语句,请思考:该触发器能不能被激活?为什么?原因:当插入的数据违反了先前定义的约束规则时,则约束优先于触发器起作用,该插入触发器不会被激发。12第10章 存储过程和触发器触发器的使用第2讲二、创建和激活触发器1.insert触发器实例2:要在xscj库的xsqk表中插入下面所示的2条信息,如果在该表上未创建触发器,则可成功插入到xsqk表中。但我们希望插入的信息必须是“计算机”系,否则就撤消刚才的插入,并返回错误信息。用触发器实现该约束。use xscj insert into xsqk(学号,姓名,性别,出生日期,专业名,所在系)values(020401,陈
12、希,1,1980-1-1,中国近代史,物理)insert into xsqk(学号,姓名,性别,出生日期,专业名,所在系)values(020402,黄梅,0,1980-1-1,信息管理,计算机)13第10章 存储过程和触发器触发器的使用第2讲二、创建和激活触发器1.insert触发器请分析:该题中Select语句的作用?where子句可否不要?create trigger tr_insert_xsqk on xsqk after insertas declare 所在系 char(10)select 所在系=xsqk.所在系 from xsqk,insertedwhere xsqk.学号=i
13、nserted.学号IF 所在系 计算机 begin rollback transaction -撤消插入操作 raiserror(不能插入非计算机系的学生信息!,16,10)endelse print 有新信息插入到xsqk表中!selectselect 所在系所在系所在系所在系=inserted.=inserted.所在系所在系所在系所在系 fromfrom insertedinserted提取插入信息中的所在系所对应的值14第10章 存储过程和触发器触发器的使用第2讲二、创建和激活触发器1.insert触发器补充说明:补充说明:raiserror语句的作用uu将错误信息显示在屏幕上,并可
14、记录在日志中将错误信息显示在屏幕上,并可记录在日志中uu例:例:raiserror(不能插入非计算机系的学生信息!,16,1)错误的严重等级。018可被任何用户引发,1925只能由系统管理员引发。发生错误时的状态信息(0127)。用户用户以字符串形式给出的错误信息。给出的错误信息。15第10章 存储过程和触发器触发器的使用第2讲二、创建和激活触发器2.delete触发器课堂练习1:在xscj库的xsqk表上创建1个名为tr_delete_xsqk的触发器,当要删除指定学号的行时,激发该触发器,撤消删除操作,并给出提示信息“不能删除xsqk表中的信息!”。create trigger tr_de
15、lete_xsqk on xsqk after deleteas rollback transaction print 不能删除xsqk表中的信息!godelete xsqk where 学号=02010116第10章 存储过程和触发器触发器的使用第2讲二、创建和激活触发器3.update触发器实例3:在xsqk表上创建一个触发器。当更新了某位学生的学号信息时,就激活触发器级联更新xs_kc表中相关成绩记录中的学号信息,并使用print语句返回一个提示信息。【题意分析】:用下列语句修改了xsqk表中的学号020101,那么xs_kc表中的该学号也应同时修改,否则,将引起数据不一致。解决的方法有
16、:1.1.创建外键约束创建外键约束(不允许修改,或者允许级联更新不允许修改,或者允许级联更新)2.2.用触发器实现用触发器实现自动级联自动级联修改修改update xsqk set 学号=020111 where 学号=02010117第10章 存储过程和触发器触发器的使用第2讲二、创建和激活触发器3.update触发器请思考:该题中参考了哪些表?为什么能从临时表中提取更新前后的学号值?create trigger tr_update_xsqk1 on xsqk after updateasdeclare 原学号 char(6),新学号 char(6)select 原学号=deleted.学号
17、,新学号=inserted.学号from deleted,inserted where deleted.姓名=inserted.姓名print 准备级联更新xs_kc表中的学号信息.update xs_kc set 学号=新学号 where 学号=原学号 print 已经级联更新了xs_kc表中原学号为+原学号+的成绩信息。可 省 去18第10章 存储过程和触发器触发器的使用第2讲二、创建和激活触发器3.update触发器课堂练习2:在xsqk表上创建名为tr_update_xsqk2的触发器,当对该表的“姓名”列修改时激发该触发器,使用户不能修改“姓名”列。create trigger tr
18、_update_xsqk2 on xsqk after updateas if update(姓名)begin rollback transaction -撤消修改操作 raiserror(不能修改学生姓名!,16,1)endgoupdate xsqk set 姓名=小花 where 姓名=杨颖 19第10章 存储过程和触发器触发器的使用第2讲三、更新、删除触发器更新触发器的语法格式:alter trigger 触发器名删除触发器的语法格式:drop trigger 触发器名,n20第10章 存储过程和触发器触发器的使用第2讲本课小结u触发器的含义u触发器的类型按触发的时机不同:uu后触发器、替代触发器后触发器、替代触发器u触发器执行期间的临时表uuinserted inserted 表表 、deleteddeleted表表u创建触发器uuinsertinsert触发器、触发器、deletedelete触发器、触发器、updateupdate触发器触发器u触发(激活)触发器(三种触发事件)u触发器的更新、删除