mysql 7天自动拒单功能,使用mysql事件定时执行岗位七天下线任务

最近做了一个招聘的项目,在项目中有一个定时下线的需求。在做之前我一直在考虑到底使用window 服务,还是使用调度,最终我选择使用mysql定时事件,因为这样简单方便。

思路:首先创建一个存储过程,通过游标遍历更新对应的岗位状态,让后在创建定时事件,废话不多说直接上代码

首先创建存储过程:

CREATE DEFINER = CURRENT_USER PROCEDURE `TimedDownLine`()

BEGIN

-- 声明变量(用于插入数据)

DECLARE PostID INT;#岗位ID

DECLARE DifferDay INT;#相差天数

DECLARE done INT DEFAULT 0;#判断是否存在信息的依据0表示存在数据

DECLARE Integral_cursor cursor for SELECT id,TIMESTAMPDIFF(DAY, ReleaseEnd, now()) AS intervalday FROM postrelease WHERE PostType=1;#查询所有在线的岗位信息(1表示在线岗位,2表示下线岗位)

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;#没有数据返回更改状态为1

-- 打开游标

OPEN Integral_cursor;

#开始循环

WHILE done=0 DO

#REPEAT

#游标赋值(游标只会向下执行)

FETCH Integral_cursor INTO PostID,DifferDay;

IF(done=0&&DifferDay>7)

THEN UPDATE postrelease SET PostType=2 where ID=PostID;

end IF;

#循环结束

#UNTIL done=1 END REPEAT;

END WHILE;

SET done=1;#更改状态,表示循环结束

-- 关闭游标

END

创建数据库事件:

#查看数据库事件是否开启

SHOW VARIABLES LIKE 'event_scheduler'

show variables like '%event%';

#设置当前事件开启

SET GLOBAL event_scheduler = 1;

#查看定时任务

select * from mysql.event;

SELECT * FROM information_schema.events;

#每天凌晨开始执行

select DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 13 HOUR)

#关闭定时任务

DROP event temp_event;

#每天凌晨开始执行(创建定时事件)

CREATE EVENT IF NOT EXISTS TimeDownlines_event

ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 0 HOUR)

ON COMPLETION PRESERVE ENABLE #到点开启定时任务

DO CALL TimedDownLine();

这样只写对于一些业务相对于没有复杂的定时任务完全可以应对,而且开发快捷,下次有时间会把window 服务的定时任务写上。

作者:追逐时光

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值