- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《 MySQL 数据库原理及应用》 项目 8 以程序方式处理学生信息管理数据表 ? 学习目标: 了解 SQL 编程基础、游标、存储过程和函数、触发器 及事务的作用 掌握游标、存储过程和函数、触发器及事务的创建 方法 掌握游标、存储过程和函数、触发器及事务的修改 及删除方法 任务 8-3 创建和使用触发器 ? 【复习回顾】 ? 存储过程 / 存储函数的定义? ? 存储过程 / 存储函数的创建方法? ? 存储过程的调用方法? ? 存储函数的调用方法? 任务 8-3 创建和使用触发器 ? 【任务分析】 为了确保数据完整性,设计人员可以用触发器实现更加复杂 的业务规则。 ? 【课堂任务】 本次任务要求掌握触发器的概念及应用。 ? 触发器的概念 ? 创建触发器 ? 查看触发器 ? 删除触发器 任务 8-3 创建和使用触发器 ? (一)触发器概述 触发器( Trigger )是一种特殊的存储过程,它与表紧密 相连,可以是表定义的一部分。当预定义的事件(如用户修改 指定表或者视图中的数据时)发生时,触发器将会自动执行。 触发器 基于一个表 创建,但是 可以针对多个表进行操作 。 所以触发器可以用来对表实施复杂的完整性约束,当触发器所 保存的数据发生改变时,触发器被自动激活,从而防止对数据 进行不正确的修改。 任务 8-3 创建和使用触发器 ? 触发器的优点如下所述: ( 1 )触发器自动执行,在表的数据做了任何修改(比如 手工输入或者使用程序采集的操作)之后立即激活。 ( 2 )触发器可以通过数据库中的相关表进行层叠更改。 这比直接把代码写在前台的做法更安全合理。 ( 3 )触发器可以强制限制,这些限制比用 CHECK 约束所 定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其 他表中的列。 任务 8-3 创建和使用触发器 ? (二)创建触发器 1 .利用命令创建触发器 因为触发器是一种特殊的存储过程,所以触发器的创建 和存储过程的创建方式有很多相似之处,其基本语法格式如 下。 CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_statement; 任务 8-3 创建和使用触发器 在触发器的 SQL 语句中,可以关联表中的任何列,通过使 用 OLD 和 NEW 列名来标识,如 OLD.col_name 、 NEW.col_name 。 OLD.col_name 关联现有的行的一列在被更 新或删除前的值。 NEW.col_name 关联一个新行的插入或更 新现有的行的一列的值。 对于 INSERT 语句,只有 NEW 是合法的。对于 DELETE 语 句,只有 OLD 是合法的。对于 UPDATE 语句, NEW 和 OLD 可 以同时使用。 任务 8-3 创建和使用触发器 【例 8.20 】 在 gradem 数据库中,当向 student 表添加一条学 生信息时,同时还需要更新 class 表中的 “classnumber” 列。 通过创建一个 INSERT 触发器,在用户每次向 student 表中添 加新的学生信息时便更新相应的班级的人数。这个触发器的名 称为 “trig_classnum” ,如何实现呢? USE gradem; CREATE TRIGGER trig_classnum AFTER INSERT ON student FOR EACH ROW UPDATE class SET number=number+1 WHERE classno = left(new.sno,8); 任务 8-3 创建和使用触发器 接下来,使用 INSERT 语句插入一条新的学生信息,以验证触发器是否会自动执行。这 里由于触发器基于 student 表,因此插入也针对此表,在 INSERT 语句之前之后各添加一条 SELECT 语句,比较一下插入记录前后处理状态的变化。 SELECT number as 插入前班级人数 FROM class WHERE classno +----------------+ | 插入前班级人数 +----------------+ | | 47 | +----------------+ 1 row in set INSERT INTO student(sno,sname,ssex) VALUES(2007030148, 李勇 , 男 ); SELECT number as 插入后班级人数 FROM class WHERE classno +---
文档评论(0)