内容正文:
河北省(计算机类)对口招生
《数据库原理与应用技术-MySQL》复习讲义
模块4 MySQL数据库编程
考点 14 事件与触发器
【考纲要求】
1.掌握触发器的基本概念与作用,掌握使用SQL 语句创建、删除触发器的操作方法及应用, 掌握触发器的种类及区别,理解触发器的使用及原则;
2. 掌握事件、事件调度器的基本概念与作用,掌握使用 SQL 语句创建、修改、删除事件的 操作方法及应用;
【知识网络】
【知识和技能要点】
一、触发器
1.定义
触发器是绑定在数据表上的特殊存储程序。它不需要手动调用,当表发生指定的增、删、改事件时,会自动触发、自动执行预设的SQL语句。
2.核心特点
(1)触发器依附数据表存在,不能独立存在;删除表则触发器自动失效。
(2)触发器自动执行,无手动调用命令。
(3) 触发器是针对表数据变化触发,不针对查询操作。
3.触发器的作用
(1) 保证数据完整性与一致性:一张表数据变动,自动同步更新关联表数据。
(2)实现数据自动联动:无需人工写SQL,自动完成关联增删改。
(3)数据日志记录:自动记录数据修改、删除、新增操作,实现审计功能。
(4)约束数据合规性:对非法数据操作自动拦截、校验数据。
4.触发器的种类及区别
(1)按触发时机分类
①BEFORE(前置触发):在数据操作执行之前触发。
作用:用于校验数据、拦截非法操作、修改即将写入的数据。
②AFTER(后置触发):在数据操作执行完成之后触发。
作用:用于同步关联表数据、记录操作日志。
(2)按触发事件分类
①INSERT触发器:向表插入数据时触发。
②UPDATE触发器:修改表数据时触发。
③DELETE触发器:删除表数据时触发。
(3)新旧数据对象
①NEW:代表新增/修改后的新数据(适用于INSERT、UPDATE)。
②OLD:代表修改前/被删除的旧数据(适用于UPDATE、DELETE)。
5.创建触发器
(1)标准语法格式
CREATE TRIGGER 触发器名
触发时机(BEFORE/AFTER) 触发事件(INSERT/UPDATE/DELETE)
ON 表名 FOR EACH ROW
BEGIN
触发执行的SQL语句;
END
(2)说明
①CREATE TRIGGER:创建触发器固定关键字。
②FOR EACH ROW:行级触发器,每修改一行数据触发一次(MySQL默认、必考)。
③BEGIN...END:包裹多条执行语句,单条语句可省略。
6.删除触发器
(1)语法格式
DROP TRIGGER 触发器名;
(2) 说明
①删除触发器不会删除数据表和数据,仅删除自动触发规则。
②删除数据表,该表所有触发器自动删除。
③触发器禁止嵌套、禁止循环触发,否则会报错。
④ 触发器内尽量不写复杂SQL,避免降低增删改效率。
⑤ 查询操作(SELECT)无法触发触发器。
⑥BEFORE可以拦截非法数据,AFTER只能事后同步数据。
2、 事件
1. 定义
事件(EVENT)是数据库中定时执行的任务,可以在指定时间、周期性自动执行SQL语句,也被称为“定时任务”。
2.事件调度器的作用
(1)定时清理过期数据(自动删除日志、过期记录)。
(2) 定时统计、汇总数据,生成报表数据。
(3)定时备份、更新数据,实现数据库自动化运维。
3.事件调度器开启
MySQL默认关闭事件调度器,使用前必须开启:
SET GLOBAL event_scheduler = ON;
4.创建事件
(1)语法格式
CREATE EVENT 事件名
ON SCHEDULE 时间规则
DO
执行的SQL语句;
(2)时间使用规则
①一次性事件:指定某个时刻执行一次
ON SCHEDULE AT '2026-12-31 23:59:59'
②周期性事件:每隔一段时间重复执行
ON SCHEDULE EVERY 1 DAY #每天执行
ON SCHEDULE EVERY 1 HOUR #每小时执行
5.修改事件
(1)关闭事件
ALTER EVENT 事件名 DISABLE;
(2)开启事件
ALTER EVENT 事件名 ENABLE;
(3)修改执行周期
ALTER EVENT 事件名 ON SCHEDULE EVERY 3 DAY;
6.删除事件
(1)语法格式:DROP EVENT 事件名;
【练习题】
一、填空题
1.________触发器在数据操作执行前触发,可用于校验、拦截非法数据。
2.新增数据的触发器类型是________触发器。
3.删除数据的触发器类型是________触发器。
4.MySQL默认的行级触发器关键字是________。
5.创建触发器的核心语法关键字是________。
6.数据库中可定时自动执行SQL的任务对象是________。
7.开启事件调度器的语句是SET GLOBAL ________ = ON;。
8.修改事件状态和周期的核心关键字是________。
二、选择题
1.下列关于触发器的本质说法正确的是( )
A. 手动调用的查询语句 B. 绑定数据表的特殊存储程序
C. 定时执行的任务 D. 数据索引结构
2.触发器的触发条件不包括以下哪种操作( )
A. INSERT B. UPDATE C. SELECT D. DELETE
3.INSERT触发器中可以使用的新旧数据对象是( )
A. OLD B. NEW C. OLD和NEW D. 均不可用
4.MySQL触发器默认类型为行级触发器,对应的关键字是( )
A. FOR EACH ROW B. EVERY ROW C. ONE ROW D. AUTO ROW
5.创建触发器的核心关键字组合是( )
A. CREATE EVENT B. CREATE TRIGGER C. CREATE VIEW D. CREATE INDEX
6.删除触发器的标准语法是( )
A. DELETE TRIGGER B. DROP TRIGGER C. REMOVE TRIGGER D. CLEAR TRIGGER
7.MySQL事件调度器默认状态是( )
A. 开启 B. 关闭 C. 半开启 D. 随机状态
8.用于关闭已有事件的语法是( )
A. ALTER EVENT 事件名 DISABLE; B. DROP EVENT 事件名;
C. CLOSE EVENT 事件名; D. STOP EVENT 事件名;
9.用于开启已关闭事件的语法是( )
A. OPEN EVENT 事件名; B. ALTER EVENT 事件名 ENABLE;
C. START EVENT 事件名; D. RUN EVENT 事件名;
10.触发器与事件的核心区别是( )
A. 触发器自动执行,事件手动执行 B. 触发器数据驱动,事件时间驱动
C. 触发器独立存在,事件依附表 D. 事件可校验数据,触发器不可
3、 判断题
1.触发器是绑定在数据表上的特殊存储程序,无需手动调用。()
2.对数据表执行SELECT查询操作时,触发器会自动触发。()
3.删除数据表后,该表对应的所有触发器会自动失效并删除。()
4.AFTER触发器可以用于校验和拦截非法数据操作。()
5.FOR EACH ROW 代表行级触发器,每行数据变动触发一次。()
6.触发器内部编写复杂SQL语句,会降低数据表增删改效率。()
7.事件可以实现定时清理过期数据、自动统计数据。()
8.事件依赖数据表存在,删除表会自动删除事件。()
9.触发器是时间驱动执行,事件是数据变动驱动执行。()
10.MySQL默认开启事件调度器,无需手动配置。()
四、程序填空题
1.创建触发器 tri_stu_insert,当向 student 表新增学生数据后,自动在 stu_log 表中记录:学生姓名、操作行为为“新增学生”。
CREATE __(1)______ tri_stu_insert
AFTER ___(2)_____
ON student FOR EACH ROW
BEGIN
INSERT INTO stu_log(stu_name,operate) VALUES(NEW.name,'新增学生');
END
2.创建周期事件 event_clear_day,每天自动清空 temp_data 过期临时数据。
CREATE __(1)______event_clear_day
ON SCHEDULE ___(2)___DO
TRUNCATE TABLE temp_data;
【答案】
一、填空题
1. BEFORE(前置) 2.INSERT 3. DELETE 4. FOR EACH ROW 5.CREATE TRIGGER
6. 事件 7. event_scheduler 8. ALTER EVENT
二、选择题
1. B 2. C 3. B 4. A 5.B 6. B 7. B 8. A 9. B 10. B
三、判断题
1. √ 2. × 3. √ 4. × 5. √ 6. √ 7. √ 8. × 9. × 10. ×
4、 程序填空题
1. (1)TRIGGER (2)INSERT
2. (1)EVENT (2)EVERY 1 DAY
原创精品资源学科网独家享有版权,侵权必究
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$