关系数据库与SQLServer2008第2版教学课件作者龚小勇第27讲触发器课件幻灯片

上传人:E**** 文档编号:89876600 上传时间:2019-06-03 格式:PPT 页数:22 大小:341KB
返回 下载 相关 举报
关系数据库与SQLServer2008第2版教学课件作者龚小勇第27讲触发器课件幻灯片_第1页
第1页 / 共22页
关系数据库与SQLServer2008第2版教学课件作者龚小勇第27讲触发器课件幻灯片_第2页
第2页 / 共22页
关系数据库与SQLServer2008第2版教学课件作者龚小勇第27讲触发器课件幻灯片_第3页
第3页 / 共22页
关系数据库与SQLServer2008第2版教学课件作者龚小勇第27讲触发器课件幻灯片_第4页
第4页 / 共22页
关系数据库与SQLServer2008第2版教学课件作者龚小勇第27讲触发器课件幻灯片_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《关系数据库与SQLServer2008第2版教学课件作者龚小勇第27讲触发器课件幻灯片》由会员分享,可在线阅读,更多相关《关系数据库与SQLServer2008第2版教学课件作者龚小勇第27讲触发器课件幻灯片(22页珍藏版)》请在金锄头文库上搜索。

1、第9章 存储过程与触发器 触发器的使用,第27讲,复习:,存储过程的含义、优点 类型:系统存储过程、用户存储过程 创建存储过程:需要确定存储过程的两个个组成部分: 输入参数、输出参数。 针对数据库操作的功能语句。,复习:,格式 create procedure p1 学号 char(10), 课程名 varchar(20) output, 成绩 tinyint output as SQL语句 调用存储过程 declare kcm varchar(16), cj tinyint exec p1 2012130101, kcm output , cj output print .,输入实参将学号传

2、递给输入形参,输出形参将课程名和成绩返回给输出实参,引:,实现数据完整性三个方面: 实现“实体完整性”的方法 primary key约束、unique约束、标识列、唯一索引 实现“参照完整性”的方法 foreign key约束 实现“域完整性”的方法 not null 约束、 default 约束、 check 约束、规则对象、 默认值对象 请思考: 当用户对表进行了相应的操作后,我们希望系统能自动撤消该操作,并给出用户提示信息,请问能否用以上的方法来实现?,不能实现。因为约束只能进行简单条件的限制,对于复杂的条件,只能通过触发器来实现。,第9章 存储过程和触发器 触发器的使用 教学内容,基础

3、知识: 触发器概述 创建触发器 触发(激活)触发器 触发器的更新 触发器的删除,第9章 存储过程和触发器 触发器的使用 学习目标,认知目标: 理解触发器的概念和作用 了解触发器的触发方式 了解inserted和deleted临时表 能力目标: 触发器的创建(重点) 创建不同类型的触发器(难点) 根据触发器的功能正确检验触发器的作用(重点),一、触发器概述 1.触发器的概念,含义 是一种特殊的存储过程。当在指定对象上执行DML事件(数据操作语言事件:insert、 update、delete)或DDL事件(数据定义语言事件:create、alter、drop) 或LOGON事件(用户与 SQL

4、Server 实例建立会话)时,由系统自动触发执行。 创建触发器的目的 对表实现复杂的数据完整性约束,以防止不正确的操作。,一、触发器概述 2.触发器的类型,DML触发器 按触发器激活的时机不同,分为: 后触发器(掌握):只有执行了insert、update、delete操作后,才激发的触发器。 替代触发器(了解):不执行命令所定义的insert、 update、delete操作,而仅执行触发器中定义的代码。 按引起触发的事件不同,分为: insert触发器、update触发器、delete触发器 DDL触发器 登录触发器,一、触发器概述 3.临时表,每个触发器被激活时,系统都为它自动创建两个

5、临时表: inserted表 deleted表 临时表的特点: 是逻辑表,由系统来维护,用户不能对它们进行修改。 其结构与源表 (激活触发器的表)结构相同 触发器执行完成后,该临时表会自动被删除。,一、触发器概述 3.临时表,inserted临时表的作用: 存放执行insert或update语句后,要在原表中插入的新行(新行同时插入了原表和inserted表中) 特点:原表和inserted表有相同的行。 deleted 临时表的作用: 存放执行delete或update语句后,要从原表中删除的行 特点:原表和deleted表不会有相同的行。 演示图,二、创建和激活DML触发器,创建格式: c

6、reate trigger 触发器名 on 表名| 视图名 for | after | instead of insert , update, delete as SQL语句 说明: 1个表上可有多个触发器。 每个触发器只能作用在一个表上。,指定了触发器激活的时机 for、after创建后触发器 instead of创建替代触发器,激活触发器的事件类型,二、创建和激活DML触发器 1.insert触发器,实例1:为xs_kc表创建一个名为t1的insert触发器,当向xs_kc表进行插入操作时激发该触发器,并给出提示信息“有新成绩信息插入到xs_kc表中!”。 create trigger t

7、1 on xs_kc for insert as print 有新成绩信息插入到xs_kc表中! go insert xs_kc values( 2012130101, 111, 87, null ),说明:该语句执行后,会激活触发器,显示提示信息。当再执行一次该插入语句,请思考:该触发器能不能被激活?为什么?,原因:当插入的数据违反了先前定义的约束规则时,则约束优先于触发器起作用,该插入触发器不会被激发。,二、创建和激活DML触发器 1.insert触发器,实例2:阅读教材例9-10。 【题意分析】:要在xscj库的xsqk表中插入下面所示的2条信息,如果在该表上未创建触发器,则可成功插入到

8、xsqk表中。但我们希望插入的信息必须是“计算机应用” 系,否则就撤消刚才的插入,并返回错误信息。用触发器实现该约束 use xscj insert xsqk values(2012140101, 陈希, 1, 1995-8-12, 环境艺术, 传媒) insert xsqk values(2012130110, 黄倩, 0, 1996-1-1, 信息安全, 计算机应用),二、创建和激活DML触发器 1.insert触发器,create trigger t2 on xsqk for insert as declare szx varchar(20) select szx= 所在系 from i

9、nserted if szx!= 计算机应用 begin rollback transaction - 撤消插入操作 raiserror (不能插入非计算机应用系的学生信息!,16,10) end,提取插入信息中的所在系所对应的值,二、创建和激活DML触发器 1.insert触发器,补充说明: raiserror语句的作用 将错误信息显示在屏幕上,并可记录在日志中 例: raiserror(不能插入非计算机应用系的学生信息!, 16 , 1),错误的严重等级。018可被任何用户引发,1925只能由系统管理员引发。,发生错误时的状态信息(0127)。,用户以字符串形式给出的错误信息。,二、创建和

10、激活DML触发器 2.delete触发器,课堂练习1:为xsqk表创建一个名为t3的delete触发器,当要删除信息安全专业学生的数据行时,激发该触发器,撤销删除操作,并给出提示信息“不能删除信息安全专业的学生信息!”,否则给出提示信息“删除成功!” create trigger t3 on xsqk for delete as if(select 专业名 from deleted)=信息安全 begin rollback transaction print 不能删除信息安全专业的学生信息! end else print 删除成功! go delete xsqk where 专业名= 信息安全

11、,二、创建和激活DML触发器 3.update触发器,实例3:阅读教材例9-11。为xsqk表创建一个update触发器,当更新了某位学生的学号信息时,就用触发器级联更新xs_kc表中相关的学号信息。 【题意分析】:用下列语句修改了xsqk表中的学号020101 ,那么xs_kc表中的该学号也应同时修改,否则,将引起数据不一致。解决的方法有: 创建外键约束 用触发器实现自动级联修改 update xsqk set 学号=2012130999 where 学号=2012130101,二、创建和激活DML触发器 3.update触发器,请思考:该题中参考了哪些表?为什么能从临时表中提取更新前后的学

12、号值? create trigger t4 on xsqk for update as declare old char(10), new char(10) select old=deleted.学号, new=inserted.学号 from deleted, inserted where deleted.姓名=inserted.姓名 print 准备级联更新xs_kc表中的学号信息 update xs_kc set 学号=new where 学号=old print 已经级联更新xs_kc表中原学号为+old +的信息!,二、创建和激活DML触发器 3.update触发器,课堂练习2:为x

13、sqk表创建一个名为t5的update触发器,当对该表的“姓名”列修改时激发该触发器,使用户不能修改“姓名”列。 create trigger t5 on xsqk for update as if update(姓名) begin rollback transaction - 撤消修改操作 print 不能修改学生姓名! end go update xsqk set 姓名=小花 where 姓名=杨颖,三、创建和激活DDL触发器,实例4: 阅读教材例9-14。,四、更新、删除触发器,更新触发器的语法格式: alter trigger 触发器名 删除触发器的语法格式: drop trigger 触发器名,n,课余作业布置,课外练习: 教材 课后练习 教材 课外实践 任务4-6 上机准备:调试作业。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号