这两天遇到一个任务,本来说是今天上的,结果挪到了6月份,这个就有点尴尬了,代码做了一些小的调整,从而能够保证适配新老调整,但是突然发现数据也需要到期调整,临时想到了一种方案,就是到时间就运行mysql的定时任务来更新数据,然后到时候我检查一下数据的状态就可以了,这样我就可以在当天稳稳的喝茶了,哈哈,接下来就说说如何创建吧。

1、首先要打开定时任务的开关,防止定时任务创建不成功



set



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客户端查看事件列表中是否存在该任务)




mysql事件一天执行一次 mysql 每天定时触发event_定时任务


一次,表示该事件仅执行一次,状态为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、现在再来看看已经创建的事件吧


mysql事件一天执行一次 mysql 每天定时触发event_mysql 当前时间戳_02


如图,如果事件已经被执行或者已经过了执行时间的话,状态就会变成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、再回顾一下创建的事件


mysql事件一天执行一次 mysql 每天定时触发event_定时任务_03


mysql事件一天执行一次 mysql 每天定时触发event_执行时间_04


由上述两幅图进行对比可知,如果是定时任务的话,类型就会变为重复,并且执行之后的状态仍为enable

总结:

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