- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
旧课回顾 例1:创建存储过程返回学生的基本情况(学号,姓名,性别,班级名,家庭住址) 例2:创建存储过程,通过输入学生的姓名返回学生选修课程的信息(课程名,成绩) 例3:创建存储过程,通过输入学号,返回两个参数@cid,@score分别代表此学生的课程号和成绩 触发器定义 触发器定义 触发器是一类特殊的存储过程,它不能显示地被调用,它是在指定的表或视图中插入(INSERT)记录,更改(UPDATE)记录或者删除(DELETE)记录时,被自动激活。 触发器的定义 触发器特点: 和特定表或视图关联 自动调用 不能被直接调用 是一个事务的部分 触发器的创建 使用Transact_SQL创建触发器 基本语法: Create trigger 触发器名 On {表名 / 视图名} { For / after / instead of } { insert / update / delete } As Sql_statement FOR 和 AFTER 是完全相等的,创建相同类型的触发器,在INSERT、UPDATE 或 DELETE 语句执行后触发[P196] INSTEAD OF 触发器取消触发动作,执行替代操作 触发器的创建 使用Transact_SQL创建触发器 举例:在数据库students中,创建一触发器,在 表stu_info中插入,删除记录时,能自动显示表中 c01班的学生信息。 触发器的工作过程 Inserted表和deleted表 在触发器执行的时候,会产生两个临时表:inserted 表和deleted表 Inserted表用于存储INSERT和UPDATE语句所影响的行 的副本 Deleted表用于存储DELETE和UPDATE语句所影响的行 的副本 触发器的工作过程 在对触发器的表进行操作时,其操作过程如下: 执行INSERT操作:插入到触发器表中的新行被插入到 inserted 表中。 执行DELETE操作:从触发器表中删除的行被插入到 deleted 表中。 执行UPDATE操作:先从触发器表中删除旧行,然后再 插入新行。其中被删除的旧行被插入到deleted 表中,插 入的新行被插入到inserted表中。 触发器的工作过程 在班级表上创建触发器,测试进行插入,修改,删除数据时触发器表中的数据的情况。 INSERT 触发器的工作过程 例1:创建一触发器,在class表中插入班级人数的同时更新department表中的系别中的人数 INSERT 触发器的工作过程(续) INSERT 触发器的工作过程(续) INSERT 触发器的工作过程(续) 请同学们完成下列触发器的创建: 1、先创建course表的副本course_bak,在course表 上创建触发器当在course表中插入数据的同时在 course_bak表中备份相同数据。 2、创建一触发器,当向stu_score表插入一记录时, 检查该记录的学号在stu_info表中是否存在且课程号 在course表中是否存在,如有一项不成立,则不允许 插入 INSERT 触发器的工作过程(续) 参考答案: 2、create trigger tri_insert on stu_score for insert as If exists(select * from inserted a where a.s_id not in(select b.s_id from stu_inf b) or a.c_id not in (select c.c_id from course c)) Begin raiserror(‘违背数据的完整性’,16,1) rollback transaction End DELETE 触发器的工作过程 举例: 创建一触发器,当删除stu_info学生表中一位学生信息 同时更新学生所在班级的class表中的班级人数。 DELETE 触发器的工作过程(续) DELETE 触发器的工作过程(续) 请同学们完成下列题目: 创建触发器,当删除学生信息表中某学生的信息的同时删除学生成绩表中此学生的相关信息 DELETE 触发器的工作过程(续) 参考答案: Create trigger tri_del On stu_info For delete As Delete stu_score From stu_score,deleted Where stu_score.s_id=deleted.s_id
文档评论(0)