• Mysql编写定时任务事件


    场景:

      例如:某系统,用户每天只能拥有一次的抽奖机会,抽过后当天就不可再抽,但是过了24:00点后用户就重新拥有一次抽奖机会。像这种需要数据库定时对某个字段进行更新操作的任务,完全可以通过数据库本身的事件机制进行操作,而服务器端也不需要用额外的代码进行这种监控定时的操作。

    Mysql:

      本文讨论的是Mysql数据库,Event Scheduler事件调度器应该是在Mysql5.1引入的,所以使用定时任务调度时,请注意查看你的Mysql版本。

    创建事件调度的语法:

    /*创建事件event_name*/
    DELIMITER $$
    
    CREATE event IF NOT EXISTS event_name
    
    ON SCHEDULE 任务条件 
    
    ON COMPLETION PRESERVE
    
    DO SQL操作
    
    DELIMITER ;

    实例情景:每半个小时更新统计字段count为0,

    /*创建定时定时更新count字段事件*/
    DELIMITER $$
    
    CREATE event IF NOT EXISTS update_count
    
    ON SCHEDULE EVERY 30 MINUTE 

    /*MYSQL注意时区设置,默认非中国时区*/
    STARTS TIMESTAMP '2009-12-18 02:58:00' ON COMPLETION PRESERVE DO update tb_count set count=0 $$ DELIMITER ;

    如上,创建了一个名叫update_count的事件,执行条件则为每30分钟执行一次,(EVERY 30 MINUTE),执行Sql为(update tb_count set count=0), 当然你可能会按天执行,所以你也可以写(EVERY 1 DAY),

    如果执行的任务Sql复杂,我们可以写触发器,直接看示例代码:

    DELIMITER $$
    
    DROP PROCEDURE IF EXISTS update_count$$
    
    CREATE PROCEDURE update_count()
    
    BEGIN
        UPDATE tb_count SET count=0;
    END$$
    
    DELIMITER ;

    以上为创建一个存储过程update_count,执行对tb_count中count字段的更新。任务中代码中do字段后则改为(call update_count() $$)。当然你可能会更复杂的需求。

    添加完event后,还需要查看event_scheduler是否开启,否则添加的event不会执行,移步下面的代码:

    /*查看event是否开启*/
    SHOW VARIABLES LIKE '%sche%';
    /*开启event*/
    SET GLOBAL event_scheduler=1;

    查看和关闭你所添加的event:

    /*关闭 event */
    ALTER event update_count ON COMPLETION PRESERVE DISABLE;
    
    /*启用 event */
    ALTER event update_count ON COMPLETION PRESERVE ENABLE;

     更多MySql语法可查看:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html

  • 相关阅读:
    在有多个input的表单当中按回车按钮,如何不自动提交表单,而触发某个按钮的事件
    login.jsp
    json数据源
    translation.js
    cookie.js
    i18next.min.js
    struts2拦截器实现原理
    proxy-target-class="true" 与proxy-target-class="false"的区别(声明事务的时候)
    NavLink
    【转载】target='_blank' 安全漏洞示例
  • 原文地址:https://www.cnblogs.com/zivxiaowei/p/3725629.html
Copyright © 2020-2023  润新知