Mysql对一张表做一个定时器事件

情景:最近公司有个业务,需要通过定时器通过时间判断去对相关业务表的数据进行状态进行变更。从功能实现的方式上,有两种方式:【1】mysql设置定时器 【2】后台代码设置定时器(注:我这边使用的是java实现的)。在此先记录一下mysql的实现方式,下一篇再记录java实现方式。

好了进入主题:mysql实现定时器任务,需要两步:【1】创建一个存储过程 【2】创建定时器

通过定时器去管理存储过程,实现对应业务表数据状态的改变。

下面记录一下对timer_test表进行操作:

需求:当前时间与end_date时间进行比较,当前时间大于end_date时间,更新status为0,每1分钟执行一次。

【1】创建存储过程

create procedure proc_test_timer()
begin
update  timer_test  set status='0' where timestampdiff( hour,end_date, sysdate()) >0;
end;

注意:上面SQL的结束的";"不要漏掉,不然创建会失败。

【2】创建事件并启动

create event  proc_test_timer_event
on schedule every 1 minute  starts timestamp '2020-01-01 00:00:00'  
on completion PRESERVE
do call proc_test_timer();

【3】开启和关闭定时器

– 启动定时器
SET GLOBAL event_scheduler = 1;
– 停止定时器
SET GLOBAL event_scheduler = 0;

【4】开启和关闭事件

– 开启事件
ALTER EVENT proc_test_timer_event ON  COMPLETION PRESERVE ENABLE;
– 关闭事件
ALTER EVENT proc_test_timer_event ON  COMPLETION PRESERVE DISABLE;

注意:这里的事件名称要与上面创建的事件名称保持一致。

【5】查看定时器和事件

--查看定时器状态
SHOW VARIABLES LIKE '%sche%';
--查看事件
select * from  mysql.event;

 

 到这里就完成,下面我们查看一下:

--查看
select * from timer_test

最后结果如下:

 

OK 这次就到这里啦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值