通过mysql存储过程实现类似计划任务的效果

首先说明需求,某个智能机柜有好多货道,在货道坏了的时候,就会将原本isbad=0的字段置为1,现在这个存储过程的目的是,要将这个被置为1字段(同时满足被置为1的时间距离现在已经超过两天)的数据定时的置为0,以表示货道又变好了

1. 数据库开启定时任务功能

SET GLOBAL event_scheduler = 1;

2. 编写创建存储过程

-- ----------------------------
-- Procedure structure for sp_road_status
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_road_status`;
DELIMITER ;;
CREATE PROCEDURE `sp_road_status`()
BEGIN
UPDATE ecs_vend_road SET isbad = 0 WHERE isbad = 1 and bad_time>0 AND ADDDATE(DATE_FORMAT(bad_time,'%Y-%m-%d'),INTERVAL 2 DAY) <= CURRENT_DATE();
END
;;
DELIMITER ;

说明:isbad为状态字段,bad_time为时间字段,当前时间大于bad_time+2天,并且isbad状态为不正常时执行

编写并创建定时任务

-- ----------------------------
-- Event structure for evt_road_status
-- ----------------------------
DROP EVENT IF EXISTS `evt_road_status`;
DELIMITER ;;
CREATE EVENT `evt_road_status` ON SCHEDULE EVERY 1 DAY STARTS '2016-05-31 00:00:00' DO CALL sp_road_status();
;;
DELIMITER ;

说明:从2014-01-01 00:00:00开始每隔1天调用上面的存储过程,间隔时间可以调整SECOND,HOUR,DAY

事件的开启关闭命令

1) 临时关闭事件

ALTER EVENT evt_road_status DISABLE;

  
2) 开启事件

ALTER EVENT evt_road_status ENABLE;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值