第12章触发器和事件电子课件 MySQL数据库管理与应用.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第12章触发器和事件电子课件 MySQL数据库管理与应用.pptx》由会员分享,可在线阅读,更多相关《第12章触发器和事件电子课件 MySQL数据库管理与应用.pptx(34页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第12 章触发器和事件电子课件 MySQL 数据库管理与应用第12章 触发器和事件主要内容12.1 触发器12.2 事件12.3 本章小结12.1 触发器 12.1.1 触发器概述 MySQL的触发器是与表有关的命名数据库对象,本质上是一种特殊的存储过程,它在插入、修改和删除特定表中的数据时触发执行。触发器不能使用CALL语句调用,当表上出现特定事件时,MySQL将自动调用该触发器。触发器可以查询其他表,也可以包含复杂的SQL语句,但不能在触发器中以显式或隐式方式开始或结束事务。12.1 触发器 12.1.1 触发器概述触发器的优点:触发器不需要明确调用,当触发表中的数据做出相应的修改后由系统
2、自动调用。触发器支持回滚机制,保证了数据的一致性和完整性。触发器可以用来实施比FOREIGN KEY、CHECK约束等更为复杂的检查和操作。触发器可以通过数据库中的相关表修改其他表。12.1 触发器 12.1.1 触发器概述 触发器比数据库本身标准的功能有更精细和更复杂的数据控制能力,用户利用触发器可以方便地实现数据库中数据的完整性和一致性。MySQL中的触发器是行级触发器,在增加、删除和修改操作相对频繁的表上尽量不要创建触发器,因为它会对表中受影响的每一行都执行一次触发器,所以触发器消耗资源较大,要慎重使用。12.1 触发器 12.1.2 NEW和OLD变量 在触发器中不能直接使用列名去标识
3、,我们用“NEW.列名”和“OLD.列名”来区分。对于insert、update和delete三种触发器事件,“NEW.列名”和“OLD.列名”并不是都适用,需要注意它们的合法性。12.1 触发器 12.1.2 NEW和OLD变量 当向表中插入新记录时,在触发器中可以使用NEW.列名来获得新纪录的某个列的值,此时OLD是不合法的。当从表中删除记录时,在触发器中可以使用OLD.列名来获得被删除纪录的某个列的值,此时NEW是不合法的。当修改表中的某条记录时,在触发器中可以使用OLD来获得修改前的记录的值,使用NEW来获得修改后的记录的值。OLD记录是只读的,不能修改;NEW记录可以在BEFORE触
4、发器中修改(SET NEW.列名=值),但在AFTER触发器中不能更改。12.1 触发器 12.1.3 创建触发器 使用命令创建触发器 语法格式:CREATE TRIGGER IF NOT EXISTS trigger_nameBEFORE|AFTER INSERT|UPDATE|DELETE ON table_name FOR EACH ROW FOLLOWS|PRECEDES other_trigger_nameBEGIN trigger_body END12.1 触发器 12.1.3 创建触发器 使用命令创建触发器根据触发动作时间和触发器事件的组合,在同一张表上建立的同一触发器事件、不同
5、触发动作时间的触发器的执行顺序如下所示:如果有 BEFORE触发器,先执行BEFORE触发器。执行SQL语句。如果有AFTER触发器,执行AFTER触发器。若SQL语句或触发器执行失败,MySQL会回滚事务,顺序如下所示:如果 BEFORE 触发器执行失败,SQL语句无法正确执行。如果SQL语句执行失败,AFTER型触发器不会被触发。如果AFTER类型的触发器执行失败,SQL语句会回滚。12.1 触发器 12.1.3 创建触发器 使用命令创建触发器增加一个备选课程表,表中四个字段含义分别为课程号、课程名称、还能选课的人数、选课人数上限。【例12.1】创建备选课程表course_availabl
6、e。在MySQL命令行客户端输入命令:CREATE TABLE course_available(cno CHAR(3)PRIMARY KEY,cname VARCHAR(10),cavailable TINYINT,climit TINYINT);12.1 触发器 12.1.3 创建触发器 使用命令创建触发器【例12.2】创建触发器,当在备选课程表上插入数据时,检查选课人数上限climit字段的取值是否在0到100之间,如果该值大于100则按100插入,如果该值小于0则按0插入。在MySQL命令行客户端输入命令:DELIMITER/CREATE TRIGGER insert_triBEFOR
7、E INSERT ON course_available FOR EACH ROWBEGIN IF NEW.climit100 then SET NEW.climit=100;END IF;END/DELIMITER;12.1 触发器 12.1.3 创建触发器 使用命令创建触发器【例12.3】创建触发器,当在备选课程表上插入数据时,检查选课人数上限climit字段的取值是否在0到100之间,若不在这个区间则不允许插入该行数据。这个要求使用CHECK约束设置更为简单一些,目前只考虑使用触发器来完成。在MySQL命令行客户端输入命令:DELIMITER/CREATE TRIGGER insert_
8、tri2BEFORE INSERT ON course_availableFOR EACH ROW BEGIN IF(NEW.climit100)THENSIGNAL SQLSTATE HY000 SET message_text=climit的值必须在0到100之间;END IF;END/DELIMITER;12.1 触发器 12.1.3 创建触发器 使用命令创建触发器【例12.4】创建触发器,实现当向score表中添加记录时,自动将备选课程表中相应课程的cavailable列的值减1。在MySQL命令行客户端输入命令:DELIMITER/CREATE TRIGGER sc_insert_t
9、riBEFORE INSERT ON scoreFOR EACH ROWBEGIN UPDATE course_available SET cavailable=cavailable-1 WHERE cno=NEW.cno;END/DELIMITER;12.1 触发器 12.1.3 创建触发器 使用图形化工具创建触发器 打开Workbench工具,连接到MySQL服务器。以例题12.4中的sc_insert_tri触发器的创建过程为例进行讲解。选中“Schemas”标签,在“jwgl”数据库下找到要创建触发器的表score,单击score右边的 图标,或者右键单击score,找到“Alter
10、table”选项并单击,出现score表的界面,如图所示。12.1 触发器 12.1.3 创建触发器 使用图形化工具创建触发器 单击下方“Triggers”标签,进入触发器界面,如图所示。触发动作时间是BEFORE,触发器事件是INSERT,所以我们单击BEFORE INSERT后 边 的 加 号“+”,或 者 右 键 单 击 BEFORE INSERT,找到“Add new trigger”选项并单击,出现如图所示界面。12.1 触发器 12.1.3 创建触发器 使用图形化工具创建触发器 将代码部分补充完整,修改触发器的默认名称为“sc_insert_tri”,注意此界面不需要输入DELIM
11、ITER语句,然后单击“Apply”,此时出现查看触发器的SQL脚本的界面。依次单击“Apply”和“Finish”后,触发器就创建完成,此时在score表 下 的“Triggers”中 就 出 现 了 sc_insert_tri触 发 器,在BEFORE INSERT下面也显示了触发器sc_insert_tri,如图所示。12.1 触发器 12.1.4 查看触发器 使用命令查看触发器查看触发器是指查看数据库中已存在的触发器的定义、状态和语法等信息。可以通过三种语句查看触发器的信息。SHOW TRIGGERS FROM|IN db_name LIKE pattern SHOW CREATE T
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第12章触发器和事件电子课件 MySQL数据库管理与应用 12 触发器 事件 电子 课件 MySQL 数据库 管理 应用
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内