MySql定时执行SQL

好久没写博客了,因为没啥可写,感觉自己对技术的追求已经没有那么强烈了。今天总结一下mysql自带的定时计划。

首先show variables like '%event_sche%';查询定时策略是否开启,如果是关闭的话,需要先开启哦。
执行语句即可:set global event_scheduler=1;

  1. 创建存储过程
    下述案例创建了 名为test_proce的存储过程函数,方便创建事件,事件直接调用该存储过程。
use miaosuyun;
delimiter //
create procedure test_proce()
begin
UPDATE order_course a
join (
			SELECT
				B.* 
			FROM
				(
				SELECT
					ROW_NUMBER() over ( PARTITION BY a.id ) AS row_num,A.* 
				FROM
					order_course A 
				WHERE
					A.course_username IN (
					SELECT
						course_username 
					FROM
						order_course 
					WHERE
						course_status IN ( '2', '4' ,'12') 
					GROUP BY
						course_username 
					HAVING
						SUM( CASE WHEN course_status = '4' THEN 1 ELSE 0 END ) = 0 
						AND SUM( CASE WHEN course_status = '12' THEN 1 ELSE 0 END ) = 0 
						AND SUM( CASE WHEN course_status = '2' THEN 1 ELSE 0 END ) > 0 
					) 
					AND A.course_status = '2' 
				) B
			WHERE
			B.row_num = 1 
	) b on a.id = b.id  set a.course_status = '1';

update order_course a 
join (select *from order_course a where a.course_status in ('3','4')  and a.recent_update_time <= DATE_SUB(NOW(), INTERVAL 10 MINUTE)) b on a.id = b.id
set a.course_status = '1',a.error_msg= null,a.cookie=null,a.watch_finish_rate=0;
end//
delimiter ;
  1. 创建事件
-- 删除事件
drop event second_event
-- 创建事件 并 每隔300秒调用一次 
create event second_event
on schedule every 300 second
do call test_proce();

常用定时执行计划

-- 表示创建后并不开始生效
on completion preserve disable

on schedule every 1 second //每秒执行1次
on schedule every 2 minute //每两分钟执行1次
on schedule every 3 day //每3天执行1次

on schedule at current_timestamp()+interval 5 day //5天后执行
on schedule at current_timestamp()+interval 10 minute //10分钟后执行
on schedule at '2016-10-01 21:50:00' //在2016年10月1日,晚上9点50执行

on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month //5天后开始每天都执行执行到下个月底
on schedule every 1 day ends current_timestamp()+interval 5 day //从现在起每天执行,执行5天
  1. 开启/关闭 任务
event second_event
alter event second_event on completion preserve enable;
event second_event
alter event second_event on completion preserve disable;
  1. 查询事件
SELECT event_name,event_definition,interval_value,interval_field,status,last_executed FROM information_schema.EVENTS;

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值