超过30分钟订单设置为失效,数据库定时任务解决方案

1、设置之前我们先了解一下数据库定时器:我这里就用MySQL了
查看与创建
查看event是否开启 : SHOW VARIABLES LIKE ‘%event_sche%’;
在这里插入图片描述
OFF为关闭ON为打开
将事件计划开启 : SET GLOBAL event_scheduler = 1;
在这里插入图片描述

将事件计划关闭 : SET GLOBAL event_scheduler = 0;
关闭事件任务 : ALTER EVENT eventName ON COMPLETION PRESERVE DISABLE;
开启事件任务 : ALTER EVENT eventName ON COMPLETION PRESERVE ENABLE;
查看事件任务 : SHOW EVENTS ;

创建一个定时任务

#create event second_event
#这是每30分钟执行一次
#on schedule every 30 minute
 #这是每1秒钟执行一次
#on schedule every 1 second
#on completion preserve disable
#do sql 语句

2、常见周期定时规则
周期执行–关键字 EVERY
其单位有second,minute,hour,day,week(周),quarter(季度),month,year
举例:

on schedule every 1 second //每秒执行1次
on schedule every 2 minute //每两分钟执行1次
on schedule every 3 day //每3天执行1次
在具体某个时间执行–关键字 AT

举例:

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执行

在某个时间段执行–关键字STARTS ENDS
举例:

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天

3、再了解计算两个时间的差值
Mysql中

datediff(day1,day2);函数返回两个日期之间的天数。
round(TIME_TO_SEC(TIMEDIFF(day1,day2)) /60)这个方法返回两个时间的分钟数差值
其中TIMEDIFF()返回day1和day2的时间差值单位是date,TIME_TO_SEC是将时间转换成秒,round则是4舍5入
SELECT TIMESTAMPDIFF(minute,'2019-06-11 11:18:48','2019-06-11 11:48:48');这个方法也返回两个时间的分钟数差值,第一个参数可以设置,day(天数),year(年),minute(分钟),hour(小时),second(秒)

4、接下来我们创建一个表来测试一下定时任务:

表名:t_test_timer ID自增长,名称。
创建定时任务
在这里插入图片描述
查看任务:已经看见我们创建的t_test_timer_event任务
在这里插入图片描述
开启事件任务:开启成功
在这里插入图片描述
查看表数据:已经多了很多数据了
在这里插入图片描述
好的测试完成,我们关闭这个事件任务:
在这里插入图片描述
5、有了以上列子。编写30分钟取消订单的定时任务 就很简单
创建定时任务:

create event t_test_timer_event
on schedule every 1 minute
on completion preserve disable
do update t_order set status=0 where round(TIME_TO_SEC(TIMEDIFF(now(),create_time)) /60)>30 and status=1

这里是我的表面和订单状态,根据你实际需求来:
根据上面的两个时间的差值得出
round(TIME_TO_SEC(TIMEDIFF(now(),create_time)) /60)>30 这个就是订单从创建到现在超过30分钟的订单 需要进行的操作可以自己修改
然后开启事件任务就OK了

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值