这两天遇到一个任务,本来说是今天上的,结果挪到了6月份,这个就有点尴尬了,代码做了一些小的调整,从而能够保证适配新老调整,但是突然发现数据也需要到期调整,临时想到了一种方案,就是到时间就运行mysql的定时任务来更新数据,然后到时候我检查一下数据的状态就可以了,这样我就可以在当天稳稳的喝茶了,哈哈,接下来就说说如何创建吧。
1、首先要打开定时任务的开关,防止定时任务创建不成功
set GLOBAL event_scheduler=on;
SHOW VARIABLES LIKE 'event_scheduler'; --查看定时任务开关是否被打开
2、执行默认的创建定时任务的语句,创建定时任务
CREATE EVENT `user_update` --指定创建的定时任务的名称,默认在当前库下创建
ON SCHEDULE AT CURRENT_DATE + INTERVAL 2 DAY --设置定时任务执行时间,两天后
ON COMPLETION NOT PRESERVE --执行完成后,不保留定时任务
DO update USER set long_desc="hello,world" WHERE NAME='3';; --具体执行的sql语句
3、查看任务是否创建成功(可以使用mysql客户端查看事件列表中是否存在该任务)
一次,表示该事件仅执行一次,状态为enable表示当前事件可被执行,
也可以通过sql语句查看事件是否被创建成功,如:
show events from member_test;--我当前的数据库为membertest
SELECT * from information_schema.events;--可以通过mysql元信息库的events查看所有创建事件
4、也可替换时间戳为事件预期执行时间,如下:
SELECT CURRENT_DATE;
SELECT CURRENT_TIME;
SELECT CURRENT_TIMESTAMP; --通过这三条指令查看任务创建时指定的时间戳的格式,
--从而按照正确的格式去创建定时任务
CREATE EVENT `member_test`.`user_update4`
ON SCHEDULE AT '2020-06-01' --替换为具体的时间戳,而不使用相对时间创建定时任务
ON COMPLETION PRESERVE
DO update USER set long_desc="hello,world" WHERE NAME='3';;
5、现在再来看看已经创建的事件吧
如图,如果事件已经被执行或者已经过了执行时间的话,状态就会变成disable,并且也会更新上次运行时间
6、创建循环执行的定时任务
CREATE EVENT `member_test`.`user_update6`
ON SCHEDULE
EVERY '5' second STARTS '2020-05-29 14:59:31' --从某一时间开始,每5s执行一次
ON COMPLETION PRESERVE
DO update user set long_desc="hello,world" WHERE name='3';;
7、再回顾一下创建的事件
由上述两幅图进行对比可知,如果是定时任务的话,类型就会变为重复,并且执行之后的状态仍为enable
总结:
学习和实践下来就感觉定时任务确实是一个好用的工具,尤其对我这种懒惰并且记忆力差的人来说。