我有个需求,数据库中有任务数据,每一条任务都有一个时间,时间超过2小时了,那我就将他的状态修改掉。
第一步,开启定时器。
查看定时器,是否为开启状态。
show variables like '%event_sche%';`
开启定时器
set global event_scheduler=1;
第二步,创建存储过程
说明:存储过程,可以理解为sql语句(触发后的事件),当定时器的条件(时间到了,或者参数改变了)达到了,执行存储过程的语句。
编写存储过程
create procedure test_proce() --自定义的存储过程名称 begin UPDATE news_details set `status` = 0 where date_add(complete_time,INTERVAL 2 HOUR) < now() and (`status` not in (1,0) or `status` is null); end;
第三步,定时器创建(定时执行存储过程)
create event test_event --test_event定时任务的名称 on schedule every 10 second --每10秒执行一次 on completion preserve disable --创建后并不立即生效 do call test_proce(); --调用存储过程(存储过程的名称)
执行时记得删除掉--注释
第四步,开启事件
alter event test_event on completion preserve enable;
成功
参考:Mysql 定时器 - 拐弯 - 博客园 --这位兄弟写的真的不错