专题十 触发器、事件和事件调度器(课件)-《数据库原理与应用技术》高考备考讲练测(河北省)
2025-04-07
|
37页
|
180人阅读
|
0人下载
精品
内容正文:
专题十 触发器、事件
数据库原理与应用技术-MySQL
专题复习讲练测
河北科学技术出版社
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
考纲要求
一
(八) MySQL的数据库编程
1.掌握触发器的基本概念与作用,掌握使用SQL语句创建、删除触发器的操作方法及应用,掌握触发器的种类及区别,理解触发器的使用及原则;
2.掌握事件、事件调度器的基本概念与作用,掌握使用SQL语句创建、修改、删除事件的操作方法及应用;
知识点梳理
二
触发器
触发器(TRIGGER)是一种用于保障数据完整性的机制,供程序员和数据分析员使用。
➽是与表事件相关的特殊存储过程。
➽其执行不由程序调用,而是由诸如对表进行 INSERT、DELETE、UPDATE 等操作这类事件触发。
知识点梳理
二
触发器作用
可在写入数据表前,强制检验或转换数据。
触发器发生错误时,异动的结果会被撤销
部分数据库管理系统可以针对数据定义语言 (DDL) 使用触发器,称为DDL触发器。
可依照特定的情况,替换异动的指令
知识点梳理
二
触发器优点
自动执行
01
级联更新
03
强化约束
05
02
跟踪变化
04
强制业务逻辑
知识点梳理
二
触发器缺点
触发频率高,占用内存,降低数据访问速度。
相对不灵活,一旦触发马上执行,不能排除特殊情况。
过度使用也会造成数据库的维护困难。
知识点梳理
二
触发器使用原则
触发器仅适用于表级事件,不适用于行级事件。
01
触发器的执行语句必须具有原子性,不能包含多个 SQL 语句 。
03
触发器执行效率较低,应尽量避免过度使用。
05
02
触发器不支持嵌套使用。
04
触发器执行语句不能对自身所针对的表进行修改操作,防止出现死循环。
知识点梳理
二
创建触发器
触发器创建语法四要素
➽触发地点 (TABLE)
➽触发事件 (INSERT/UPDATE/DELETE)
➽触发时间 (AFTER/BEFORE)
➽触发器程序体 (BEGIN…END)
每个表的每个事件每次只允许一个触发器。
每个表最多支持6种触发器,即 BEFORE INSERT 、BEFORE UPDATE 、BEFORE DELETE 、AFTER INSERT 、AFTER UPDATE 、AFTER DELETE。
知识点梳理
二
创建触发器
CREATE TRIGGER语句
➽CREATE TRIGGER<触发器名><BEFORE|AFTER> <INSERT|UPDATE |DELETE>
ON <表名>FOR EACH ROW
<触发器主体>
知识点梳理
二
创建触发器
CREATE TRIGGER语句
CREATE TRIGGER <触发器名>:开始创建触发器,<触发器名> 要在数据库里唯一,命名应反映功能,如 before_insert_orders。
<BEFORE|AFTER>:指定执行时机。BEFORE 是事件执行前执行,可用于数据验证;AFTER 是事件执行后执行,常用于记录日志。
<INSERT|UPDATE |DELETE>:指定触发事件类型,分别对应插入、更新、删除操作。
ON <表名>:指定触发器关联的表,该表发生指定事件时,触发器才激活。
FOR EACH ROW:表示触发器针对每行受影响的数据执行。
<触发器主体>:是触发器执行的具体操作,可含一条或多条 SQL 语句。可使用 NEW(INSERT 和 UPDATE 时代表新数据)和 OLD(UPDATE 和 DELETE 时代表旧数据)关键字引用数据。
知识点梳理
二
查看触发器
查看当前数据库的所有触发器
➽SHOW TRIGGERS
查看当前数据库的某个触发器
➽SHOW CREATE TRIGGER 触发器名
查看TRIGGERS数据表中的触发器信息
➽SELECT*FROM information_schema.TRIGGERS
知识点梳理
二
删除触发器
DROP TRIGGER命令
➽DROP TRIGGER 触发器名
知识点梳理
二
事件
事件是 MySQL 数据库提供的一种定时执行机制,它允许用户预先定义在特定时间点或按照一定时间间隔执行特定的 SQL 语句或存储过程。事件调度器(Event Scheduler)是 MySQL 服务器的一个组件,负责管理和执行这些事件。通过事件,用户可以实现诸如数据备份、数据清理、统计数据更新等定时任务,而无需手动干预。
知识点梳理
二
事件优缺点
自动化执行
提高数据处理效率
增强系统稳定性
资源消耗
不可以调用
知识点梳理
二
事件调度
事件由一个特定的线程来管理。
启用事件调度器后,拥有SUPER 权限的账户执行 SHOW PROCESSLIST可以看到该线程。
➽事件调度核心参数:event_scheduler。
知识点梳理
二
查询事件调度状态
➽SHOW VARIABLES LIKE'event_scheduler';
➽SELECT @@event_scheduler;
➽SHOW processlist;
知识点梳理
二
开关事件调度
该配置只是临时生效,重启后失效。
① SET GLOBAL event_scheduler=ON;
②SET @@global.event_scheduler=ON;
③ SET GLOBAL event_scheduler=1;
④SET @@global.event_scheduler=1;
(1)开启事件调度(临时)
该配置只是临时生效,重启后失效。
①SET GLOBAL event_scheduler=OFF;
② SET @@global.event_scheduler=OFF;
③ SET GLOBAL event_scheduler=0;
④SET @@global.event_scheduler=0:
(2)关闭事件调度(临时)
要想永久生效需要在配 置文件 (my.ini) 中配置参数。
① event_scheduler=1# 开启事件;
② event_scheduler=0# 关闭事件。
(3)开关事件调度(永久)
知识点梳理
二
创建事件
➽CREATE EVEVT [IF NOT EXISTS] <事件名> ON SCHEDULE <时间表>
[ON COMPLETION [NOT]PRESERVE]
[ENABLE |DISABLE]
[COMMENT 'comment']
DO
<事件主体>
知识点梳理
二
创建事件
➽
CREATE EVENT [IF NOT EXISTS] <事件名>:创建事件,IF NOT EXISTS 可选,若事件已存在则不报错。<事件名> 要在数据库中唯一。
ON SCHEDULE <时间表>:指定事件执行时间,有一次性执行(用 AT 指定时间点)和周期性执行(用 EVERY 指定间隔,可结合 STARTS 和 ENDS)两种方式。
[ON COMPLETION [NOT] PRESERVE]:可选。PRESERVE 表示事件执行完保留定义,NOT PRESERVE(默认)则删除。
[ENABLE | DISABLE]:可选。ENABLE 让事件默认启用,按时间表执行;DISABLE 则默认禁用。
[COMMENT 'comment']:可选。添加注释说明事件功能等。
DO <事件主体>:定义事件执行的 SQL 语句或存储过程。
知识点梳理
二
创建事件
知识点梳理
二
查询事件
➽查询系统中所有的事件
SHOW EVENTS
➽查询特定事件的详情
SHOW CREATE EVENT < 事件名 >
知识点梳理
二
启动与关闭事件
➽启动事件
ALTER EVENT 事件名 ENABLE
➽关闭事件
ALTER EVENT 事件名 DISABLE
知识点梳理
二
修改事件
➽修改事件语法
ALTER EVENT < 事件名 > ON SCHEDULE < 时间表 >
[ON COMPLETION [NOT]PRESERVE]
[ENABLE|DISABLE]
[COMMENT 'comment']
DO
<事件主体>
➽删除事件
DROP EVENT [IF EXISTS] < 事件名 >
限时练习
三
1.关于 MySQL 触发器,以下说法正确的是( )
A. 触发器可以针对行级事件
B. 触发器可以嵌套使用
C. 触发器的执行语句必须是原子性的
D. 触发器可以对自身所针对的表进行修改操作
答案:C
限时练习
三
2.一个表最多支持多少种触发器( )
A. 3 种
B. 4 种
C. 5 种
D. 6 种
答案:D
限时练习
三
3.查看当前数据库某个触发器定义的语句是( )
A. SHOW TRIGGERS
B. SHOW CREATE TRIGGER 触发器名
C. SELECT * FROM information_schema.TRIGGERS
D. SHOW TABLE STATUS LIKE ' 触发器名 '
答案:B
限时练习
三
4.在 MySQL 中,事件调度器默认是( )
A. 开启的
B. 关闭的
C. 不确定
D. 根据数据库版本而定
答案:B
限时练习
三
5.创建事件时,若希望事件执行完成后保留事件定义,应使用以下哪个参数( )
A. ON COMPLETION PRESERVE
B. ON COMPLETION NOT PRESERVE
C. ENABLE
D. DISABLE
答案:A
答案:A
限时练习
三
6.触发器可以在对表进行数据定义语言(DDL)操作时触发。( )
答案:×
7.可以使用 DROP EVENT 语句删除事件,使用 DROP TRIGGER 语句删除触发器。( )
答案:√
限时练习
三
8.事件的执行是由程序调用触发的。( )
答案:×
9.创建事件时,时间表中使用 AT 关键字可以完成重复的计划任务。( )
答案:×
限时练习
三
10.创建一个名为before_insert_trigger的触发器,在向students表插入数据之前,检查插入的age值是否大于 0,若不大于 0 则抛出错误,写出创建该触发器的 SQL 语句。
限时练习
三
答案:
DELIMITER //
CREATE TRIGGER before_insert_trigger
BEFORE INSERT ON students
FOR EACH ROW
BEGIN
IF NEW.age <= 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '年龄必须大于0';
END IF;
END //
DELIMITER ;
限时练习
三
11.查看当前数据库中所有触发器的信息,写出对应的 SQL 语句。
答案:
SHOW TRIGGERS;
限时练习
三
12.创建一个名为backup_event的事件,使其在 2024 年 11 月 1 日凌晨 3 点执行一次,执行内容为调用名为backup_database的存储过程,写出创建该事件的 SQL 语句。
限时练习
三
答案:
CREATE EVENT IF NOT EXISTS backup_event
ON SCHEDULE AT '2024-11-01 03:00:00'
ON COMPLETION NOT PRESERVE
ENABLE
COMMENT '2024年11月1日凌晨3点执行数据库备份事件'
DO
CALL backup_database();
限时练习
三
13.关闭名为my_event的事件,写出对应的 SQL 语句。
答案:
ALTER EVENT my_event DISABLE;
谢谢
$$
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。