zoukankan      html  css  js  c++  java
  • Mysql数据库设置定时任务

    最近手头在做一个拍卖的电商项目。

    中间需要将到点的拍卖会状态设置为进行中。

    我们的解决方案是Mysql的定时器任务,这里进行一个简单的总结。

    1.使用范围

    不是所有的MySQL版本都支持,Mysql 5.1之后才开始支持的新特性

     

    2.涉及到的mysql的语法

    #查询MySQL计划任务支持是否开启  

    show variables like '%sche%';  

     

    #开启MySQL计划任务支持  

    SET GLOBAL event_scheduler = ON;  

    SET @@global.event_scheduler = ON;  

    SET GLOBAL event_scheduler = 1;  

    SET @@global.event_scheduler = 1;  

      

    #关闭MySQL计划任务支持  

    SET GLOBAL event_scheduler = OFF;  

    SET @@global.event_scheduler = OFF;  

    SET GLOBAL event_scheduler = 0;  

    SET @@global.event_scheduler = 0;  

      

    #如果计划任务存在,则删除计划任务  

    DROP EVENT IF EXISTS testInsert;  

      

    #创建计划任务  

    CREATE EVENT IF NOT EXISTS testInsert  

    ON SCHEDULE EVERY 3 SECOND  

    ON COMPLETION PRESERVE   

    DO INSERT INTO aa(`name`,sex) VALUES('aa',2),('bb',1);  

      

    #开启计划任务  

    ALTER EVENT testInsert ENABLE;  

      

    #关闭计划任务  

    ALTER EVENT testInsert DISABLE;  

     

    #查询MySQL计划任务支持是否开启  

    show variables like '%sche%';  

      

    #开启MySQL计划任务支持  

    SET GLOBAL event_scheduler = ON;  

    SET @@global.event_scheduler = ON;  

    SET GLOBAL event_scheduler = 1;  

    SET @@global.event_scheduler = 1;  

      

    #关闭MySQL计划任务支持  

    SET GLOBAL event_scheduler = OFF;  

    SET @@global.event_scheduler = OFF;  

    SET GLOBAL event_scheduler = 0;  

    SET @@global.event_scheduler = 0;  

      

    #如果计划任务存在,则删除计划任务  

    DROP EVENT IF EXISTS testInsert;  

      

    #创建计划任务  

    CREATE EVENT IF NOT EXISTS testInsert  

    ON SCHEDULE EVERY 3 SECOND  

    ON COMPLETION PRESERVE   

    DO INSERT INTO aa(`name`,sex) VALUES('aa',2),('bb',1);  

      

    #开启计划任务  

    ALTER EVENT testInsert ENABLE;  

      

    #关闭计划任务  

    ALTER EVENT testInsert DISABLE;  

     

     

     

    最后,给一个完整的测试用例。

    mysql定时器是系统给提供了event,下面创建表:
    create table mytable (
    id int auto_increment not null,
    name varchar(100) not null default '',
    introduce text not null,
    createtime timestamp not null,
    constraint pk_mytable primary key(id)
    )


    创建存储过程,这里的存储过程主要提供给mysql的定时器event来调用去执行:
    create procedure mypro()
    BEGIN
    insert into mytable (name,introduce,createtime) values ('1111','inner mongolia',now());
    end;
    这里只是简单的写了一下,只是为了说明例子。


    紧接着创建mysql的定时器event
    create event if not exists eventJob 
    on schedule every 1 second
    on completion PRESERVE
    do call mypro();
    这里设置为每一秒执行一次


    至此所有的准备工作已经写完了,做完这些,mysql要想利用定时器必须的做准备工作,就是把mysql的定时器给开启了:
    SET GLOBAL event_scheduler = 1;  -- 启动定时器
    SET GLOBAL event_scheduler = 0;  -- 停止定时器


    紧接着还要开启事件:
    ALTER EVENT eventJob ON  COMPLETION PRESERVE ENABLE;   -- 开启事件
    ALTER EVENT eventJob ON  COMPLETION PRESERVE DISABLE;  -- 关闭事件


    SHOW VARIABLES LIKE '%sche%'; -- 查看定时器状态


    至此,你去数据库里面的表mytable里面看下,系统会每隔一秒去插入一条数据,嘻嘻,任务完成了。
    select * from mytable

  • 相关阅读:
    How to function call using 'this' inside forEach loop
    jquery.validate.unobtrusive not working with dynamic injected elements
    Difference between jQuery.extend and jQuery.fn.extend?
    Methods, Computed, and Watchers in Vue.js
    Caution using watchers for objects in Vue
    How to Watch Deep Data Structures in Vue (Arrays and Objects)
    Page: DOMContentLoaded, load, beforeunload, unload
    linux bridge
    linux bridge
    EVE-NG网卡桥接
  • 原文地址:https://www.cnblogs.com/mr-wuxiansheng/p/5962454.html
Copyright © 2011-2022 走看看