1、概述
事件调动器可以在指定的时刻执行某些特定的任务,以此取代只能由操作系统的计划任务来执行的工作。
事件和触发器的区别
事件是基于特定时间周期来执行某些任务
触发器是基于某个表所产生的事件触发
在使用事件调度器之前,确保event_scheduler已开启
-- 查询功能是否开启
SHOW VARIABLES LIKE 'event_scheduler';
-- 或者查看系统变量
SELECT @@event_scheduler;
如果系统返回的结果是OFF,需执行
-- 开启功能命令:
SET GLOBAL event_scheduler = 1;
SET GLOBAL event_scheduler = ON;
-- 关闭功能命令:
SET GLOBAL event_scheduler = 0;
SET GLOBAL event_scheduler = OFF;
2、创建事件
语法格式
CREATE
[DEFINER={user | CURRENT_USER}]
EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule(调度时间设置)
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO sql_statement;
| 子句 | 说明 |
|---|---|
| DEFINER | 可选,用于定义事件执行时检查权限的用户 |
| IF NOT EXISTS | 可选项,用于判断要创建的事件是否存在 |
| EVENT event_name | 必选,用于指定事件名,event_name的最大长度为64个字符,如果为指定event_name,则默认为当前的MySQL用户名(不区分大小写) |
| ON SCHEDULE schedule | 必选,用于定义执行的时间和时间间隔 |
| ON COMPLETION [NOT] PRESERVE | 可选,用于定义事件是否循环执行,即是一次执行还是永久执行,默认为一次执行,即 NOT PRESERVE |
| ENABLE | DISABLE | DISABLE ON SLAVE | 可选项,用于指定事件的一种属性。其中,关键字ENABLE表示该事件是活动的,也就是调度器检查事件是否必选调用;关键字DISABLE表示该事件是关闭的,也就是事件的声明存储到目录中,但是调度器不会检查它是否应该调用;关键字DISABLE ON SLAVE表示事件在从机中是关闭的。如果不指定这三个选择中的任意一个,则在一个事件创建之后,它立即变为活动的。 |
| COMMENT ‘comment’ | 可选,用于定义事件的注释 |
| DO event_body | 必选,用于指定事件启动时所要执行的代码。可以是任何有效的SQL语句、存储过程或者一个计划执行的事件。如果包含多条语句,可以使用BEGIN…END复合结构 |
一些常用的时间间隔设置:
(1)每隔5秒钟执行
ON SCHEDULE EVERY 5 SECOND
(2)每个月的第一天凌晨1点执行
ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY),INTERVAL 1 MONTH),INTERVAL 1 HOUR)
(3)每十二个小时,从现在起三十分钟后开始,并于现在起四个星期后结束
ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK
3、案例
创建名称为event_user的事件,用于每隔5秒钟向数据表tb_user(用户信息表)中插入一条数据。
(1)首先创建tb_user(用户信息表)。
-- 创建用户信息表
CREATE TABLE IF NOT EXISTS tb_user
(
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号',
name VARCHAR(30) NOT NULL COMMENT '用户姓名',
create_time TIMESTAMP COMMENT '创建时间'
) COMMENT = '用户信息表';
(2)创建事件
-- 创建事件
CREATE EVENT IF NOT EXISTS event_user
ON SCHEDULE EVERY 5 SECOND
ON COMPLETION PRESERVE
COMMENT '新增用户信息定时任务'
DO INSERT INTO tb_user(name,create_time) VALUES('博客',NOW());
4、查询事件
SELECT * FROM information_schema.events;
5、修改事件
在MySQL 5.1及以后版本中,事件创建之后还可以使用ALTER EVENT语句修改其定义和相关属性。其语法如下:
ALTER
[DEFINER={user | CURRENT_USER}]
EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO event_body;
6、启动与关闭事件
-- 启动名称为event_user的事件。
ALTER EVENT event_user ENABLE;
-- 关闭名称为event_user的事件。
ALTER EVENT event_user DISABLE;
7、删除事件
在MySQL 5.1及以后版本中,删除已经创建的事件可以使用DROP EVENT语句来实现。
DROP EVENT IF EXISTS event_user;
本文详细介绍了MySQL中的事件调度器,包括如何创建、查询、修改和删除事件。事件调度器可在特定时间执行任务,不同于基于表事件的触发器。文章通过案例展示了如何设置时间间隔,如每5秒执行,以及创建名为event_user的事件,定时向tb_user表中插入数据。同时,还介绍了查询、修改和管理事件的方法。
2438

被折叠的 条评论
为什么被折叠?



