Mysql数据库:添加定时任务并执行
一、开启定时任务
1、查看event是否已开启:
SHOW VARIABLES LIKE '%event_sche%';
OFF代表未开启,ON代表已开启。
2、开启事件调度线程(事件计划):
SET GLOBAL event_scheduler = ON;
mysql使用一个事件调度线程的特殊线程来执行所有调度事件,开启事件任务前需要开启该线程。
3、关闭事件调度线程(事件计划):
SET GLOBAL event_scheduler = OFF;
4、查看当前调度计划中已有的所有事件任务列表:
show events;
5、开启事件任务:
ALTER EVENT eventName ON COMPLETION PRESERVE ENABLE;
6、关闭事件任务:
ALTER EVENT eventName ON COMPLETION PRESERVE DISABLE;
开启和关闭事件任务语句中的eventName需更改为需要开启和关闭的任务名称,在事件任务列表中有名字显示。
二、创建存储过程
1、删除同名存储过程(重复执行语句时防止报错,每次先清除再重新生成):
DROP PROCEDURE IF EXISTS xxxxxxx;
2、生成存储过程:
CREATE PROCEDURE xxxxxxx() BEGIN sssssssEND
其中xxxxxxx为存储过程名称,在编写定时任务时需调用,sssssss则为要执行的sql语句。
三、创建定时任务
1、删除同名定时任务(先清除再重新生成):
DROP EVENT IF EXISTS ttttttt;
2、生成定时任务:
CREATE EVENT ttttttt
ON SCHEDULE EVERY 1 DAY
STARTS TIMESTAMP '2022-07-05 00:00:00' ON COMPLETION PRESERVE
DO BEGIN CALL xxxxxxx(); END
在这段代码中:
ttttttt:定时任务名称;
ON SCHEDULE:计划任务(分两种类型:AT代表一次性任务,在指定时间执行一次任务;EVERY代表重复性任务,每隔多久执行一次任务);
1 DAY:可修改为其他数字和单位(当前是代表一天执行一次,可随意更换数字和单位,单位类型有YEAR,MONTH,DAY,HOUR,MINUTE,SECOND);
STARTS:代表开始执行的时间,ENDS用法相同,代表结束执行的时间。后面跟随TIMESTAMP时间戳类型或者DATETIME时间格式类型;
ON COMPLETION:当这个事件执行结束的时候(不会再发生的时候,如一次性执行结束或者重复性任务运行到结束时间,停止再执行);
PRESERVE:保留该事件,搭配前面的语句,意思是当这个定时任务执行完了之后,不进行删除而是保留,类似于逻辑删除,可以作为历史数据进行查询;
CALL:执行存储过程,搭配定时实现定时执行某个sql语句的效果,即定时任务。
添加定时任务后需开启生效。