mysql的触发器以及事件调度器实现定时更新数据库

2018-01-24  本文已影响765人  史史小子

        最近项目中需要实现一个功能,定时更新数据库中不正常的数据,因为服务器是windows的,所以linux的crontab不可用,而windows的bat调用感觉不太好,框架用的是tp5,tp框架定时任务总是要主动触发才能生效,所以最终选择了mysql的事件调度器结合触发器实现。

1:查看mysql是否开启了事件,如果是OFF或者0,表示是关闭的。

show VARIABLES LIKE '%sche%';      //查看状态

SET GLOBAL event_scheduler = 1       //开启

2:创建event要调用的存储过程demo-proce

delimiter //

drop procedure if exists demo_proce//

create procedure demo_proce()

begin

update demo set status=0 where (status=1) and (unix_timestamp(now()) -modify_time)>30;

end//

delimiter ;

3:创建事件demo_event(每10秒自动调用存储过程)

create event demo_event

on schedule every 10 second

 on completion preserve disable

 do call demo_proce();

4:开启事件demo_event

alter event demo_event on completion preserve enable;

5:关闭事件demo_event

alter event demo_event on completion preserve disable;

6:查看创建的event

select * from mysql.event;

        整个过程大概就是这样的,经过测试能用,但是不知道执行效率怎么样,也不知道怎么测试同linux的定时任务效率,但是感觉应该执行效率会好点,因为mysql的底层是c语言开发的,每次操作sql语句,要先编译成c语言,但是结合了存储过程,只需要编译一次就可以了,所以从这方面来看,使用事件调度效果会好些。(其实我是菜鸟,瞎猜的)

上一篇下一篇

猜你喜欢

热点阅读