加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

怎么使用mysql自带的定时器定时执行sql

发布时间:2023-04-12 15:05:22 所属栏目:MySql教程 来源:
导读:本篇内容主要讲解“怎么用mysql自带的定时器定时执行sql”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用mysql自带的定时器定时执行sql”
本篇内容主要讲解“怎么用mysql自带的定时器定时执行sql”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用mysql自带的定时器定时执行sql”吧!
 
需求
 
每天往一个表里面插入两条数据,但日期不同
 
INSERT INTO test(`id`, `art_training_institutions`, `places_for_performances`, `script_entertainment`, `video_game_hall`, `stage`, `ktv`, `Internet_bar`, `status`, `statistics_time`, `insert_time`) VALUES (100, 2253, 61, 546, 90, 51, 897, 1961, 1, '2022-08-24', '2022-08-25 14:00:00');
 
INSERT INTO test(id`, `art_training_institutions`, `places_for_performances`, `script_entertainment`, `video_game_hall`, `stage`, `ktv`, `Internet_bar`, `status`, `statistics_time`, `insert_time`) VALUES (101, 0, 0, 0, 0, 0, 0, 0, 2, '2022-08-24', '2022-08-25 14:00:00');
 
如果没有其他调度或者不想每天自己手动执行,可以考虑使用MySQL自带的定时器来做
 
首先
 
1.查看是否开启定时策略
 
show variables like '%sche%';
 
怎么用mysql自带的定时器定时执行sql
 
如果你的是OFF
 
那就需要开启:
 
set global event_scheduler=1;
 
2.创建存储函数,存储定时执行的事件
 
根据自己的需求,修改存储函数
 
CREATE PROCEDURE insert_monitor()
 
INSERT INTO test( `art_training_institutions`, `places_for_performances`, `script_entertainment`, `video_game_hall`, `stage`, `ktv`, `Internet_bar`, `status`, `statistics_time`)
 
select 2253, 61, 546, 90, 51, 897, 1961, 1, CURRENT_DATE
 
union all
 
select 0, 0, 0, 0, 0, 0, 0, 2, CURRENT_DATE
 
3.创建定时任务
 
-- 每天0点执行
 
create event if not EXISTS my_monitor
 
on schedule every  1 DAY STARTS date(CURRENT_DATE+1)
 
on completion preserve  do call insert_monitor();
 
4.查看创建的定时任务
 
show events;
 
或者
 
select * from mysql.event;
 
怎么用mysql自带的定时器定时执行sql
 
删除
 
drop event my_monitor
 
如果不想删除,可以考虑将它关闭
 
5.开启或关闭定时任务
 
-- 关闭
 
alter event my_monitor on COMPLETION PRESERVE DISABLE;  
 
-- 开启
 
alter event my_monitor on COMPLETION PRESERVE ENABLE;
 
怎么用mysql自带的定时器定时执行sql
 
补充:ON SCHEDULE后面可以 自由发挥
 
每天凌晨一点执行定时任务
 
on schedule every  1 DAY STARTS DATE_ADD(DATE(CURRENT_DATE+1), interval 1 hour)
 
on schedule EVERY 1 DAY STARTS date_add(date( ADDDATE(curdate(),1)),interval 1 hour)
 
特定的日期特定的时间点执行定时任务
 
ON SCHEDULE at '2019-10-10 19:14:10'
 
每五分钟执行一次定时任务
 
ON SCHEDULE EVERY 5 MINUTE STARTS CURDATE()
 
每小时执行一次定时任务
 
ON SCHEDULE EVERY 1 HOUR STARTS CURDATE()
 
at 特定时间执行,every 重复执行
 
参考 MySQL - 定时任务(每天凌晨1点、每小时、每分钟、某一时间点)
 
补充:定时器常用案例
 
周期性
 
定时器,一直执行
 
从现在开始每隔x天执行一次
 
DROP EVENT IF EXISTS user_event ;    
 
CREATE EVENT user_event
 
ON SCHEDULE EVERY 9 DAY STARTS NOW()
 
DO  call user_procedure();
 
每天凌晨1点执行
 
DROP EVENT IF EXISTS user_event ;    
 
CREATE EVENT user_event
 
on schedule EVERY 1 DAY STARTS date_add(date( ADDDATE(curdate(),1)),interval 1 hour)  
 
DO  call user_procedure();
 
每个月的一号凌晨1 点执行
 
DROP EVENT IF EXISTS 定时器名称 ;    
 
CREATE EVENT user_event
 
ON schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 month),interval 1 hour)
 
DO  call user_procedure();
 
每个季度一号的凌晨1点执行
 
DROP EVENT IF EXISTS user_event ;    
 
CREATE EVENT user_event
 
ON schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour)
 
DO  call user_procedure();
 
每年1月1号凌晨1点执行
 
DROP EVENT IF EXISTS user_event ;    
 
CREATE EVENT user_event
 
ON schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour)
 
DO  call user_procedure();
 
周期一次性
 
定时器执行很多次后在满足某个条件,定时器结束
 
从现在开始每天执行一次,5天后停止执行
 
DROP EVENT IF EXISTS user_event ;    
 
CREATE EVENT user_event
 
    ON SCHEDULE EVERY 1 DAY
 
    ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
 
DO  call user_procedure();
 
从现在开始5天后开始执行,一个月后停止执行
 
DROP EVENT IF EXISTS user_event ;    
 
CREATE EVENT user_event
 
        ON SCHEDULE EVERY 1 DAY
 
    STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
 
    ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
 
DO  call user_procedure();
 
一次性
 
满足指定条件时只会执行一次定时器,然后定时器被清除
 
在未来指定时间点执行一次
 
DROP EVENT IF EXISTS user_event ;    
 
CREATE EVENT user_event
 
    ON SCHEDULE AT TIMESTAMP '2021-09-24 18:26:00'
 
    ON COMPLETION NOT PRESERVE
 
DO  call user_procedure();
 
在2021-09-24 18:26:00时候执行user_procedure()存储过程一次之后,该定时器被系统清除从现在开始1小时后执行一次
 
DROP EVENT IF EXISTS user_event ;    
 
CREATE EVENT user_event
 
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
 
    ON COMPLETION NOT PRESERVE
 
DO  call user_procedure();
 
开启和关闭指定定时器
 
alter event user_event on completion preserve enable; -- 开启定时任务
 
alter event user_event on completion preserve disable; -- 关闭定时任务
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!