MySQL event 计划任务示例

时间:2022-08-22 23:22:04

在开发过程中遇到过排行榜的问题,曾经想用 mysql 的 event 计划任务去做,每天让数据库定期更新数据,程序只需要拉更新后的数据即可。但是,这有几个问题:

1、如果数据量很大的话,数据库的执行时间是不确定的,而 mysql 似乎没有主动通知程序的机制,这就让程序很被动,什么时候去拉数据合理呢?

2、mysql 的 event 机制是在执行之后会计算当前到下次执行中间还需多少秒,计算一次数值而已,然后走完这么多秒后再次执行,并不是定点执行,这样如果服务器重启或修改时间就会错乱,也不方便测试(测试一般会用修改服务器时间来测)。

虽然 event 是将要执行的数据库语句编译后存入数据库的,可以减少每次编译语句的时间,但基于以上两点,它并不适合用于排行榜的更新,最后选择了存储过程。不过,event 计划任务还是有很大的用处的,作为一个知识点也值得我们学习,下面是一个实例:

-- 设置时区并设置计划事件调度器开启,也可以 event_scheduler = ON
set time_zone = '+8:00';
set GLOBAL event_scheduler = 1;

-- 设置该事件使用或所属的数据库base数据库
use test;

-- 如果原来存在该名字的任务计划则先删除
drop event if exist test_update;

-- 设置分隔符为 '$$' ,mysql默认的语句分隔符为 ';' ,这样在后续的 create 到 end 这段代码都会看成是一条语句来执行
DELIMITER $$

-- 创建计划任务,设置第一次执行时间为'2012-11-15 10:00:00',并且每天执行一次
create event test_update 
on schedule every day starts timestamp '2012-11-15 10:00:00'
do

-- 开始该计划任务要做的事
begin

-----------------------------------
-- do something 编写你的计划任务要做的事
-----------------------------------

-- 结束计划任务
end $$

-- 将语句分割符设置回 ';'
DELIMITER ;