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

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

作者: 史史小子 | 来源:发表于2018-01-24 11:57 被阅读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语言,但是结合了存储过程,只需要编译一次就可以了,所以从这方面来看,使用事件调度效果会好些。(其实我是菜鸟,瞎猜的)

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/huayaxtx.html