这两天遇到一个任务,本来说是今天上的,结果挪到了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

总结:

学习和实践下来就感觉定时任务确实是一个好用的工具,尤其对我这种懒惰并且记忆力差的人来说。