zoukankan      html  css  js  c++  java
  • mysql 定时任务的使用

    mysql5.1.6增加了一个事件调度器(Event Scheduler),可以做定时任务(定时删除记录,定时数据统计),取代之前系统的计划任务。mysql事件调度器可以精确到每秒执行一个任务。

    事件调度器与触发器的区别:事件调度器是基于特定时间周期来触发执行某些任务,触发器是基于某个表产生的事件来触发。

    一、查看是否开启

    > show variables like 'event_scheduler';

    二、开启事件调度器

    set global event_scheduler = on;

     这里的设置,当mysql重启后,又会自动关闭。如果需要一直开启,需要在my.ini中配置如下:

    event_scheduler = on

    三、创建事件语法

    CREATE EVENT [IF NOT EXISTS ] event_name 
    ON SCHEDULE schedule 
    [ ON COMPLETION [ NOT ] PRESERVE ] 
    [ ENABLE | DISABLE ] 
    [ COMMENT '注释' ] 
    DO SQL语句;
    
    schedule : AT TIMESTAMP [+ INTERVAL interval ] | EVERY interval [ STARTS TIMESTAMP ] [ ENDS TIMESTAMP ] 
    interval : quantity { YEAR | QUARTER | MONTH | DAY |
                          HOUR | MINUTE | WEEK | SECOND | 
                          YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND |
                          HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND }

    event_name:事件名,最大长度64个字符。

    schedule:执行时间。

    [ ON COMPLETION [ NOT ] PRESERVE ] :事件是否需要复用。

    [ ENABLE | DISABLE ] :事件开启或关闭。

    四、关闭事件

    ALTER EVENT event_name DISABLE;
    

    五、开启事件

    ALTER EVENT event_name ENABLE;
    

    六、删除事件

    DROP EVENT [IF EXISTS ] event_name;

    七、查看所有事件

    SHOW EVENTS; 

    八、事件例子

    我们先创建一个简单的test表用于测试

    CREATE TABLE `test` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
      `now` datetime DEFAULT NULL COMMENT '时间',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    事件类型有两种,一种是间隔触发,一种是特定时间触发

    我们每隔一秒向test表插入一条记录:

    DROP EVENT IF EXISTS event_test;
    CREATE EVENT event_test 
    ON SCHEDULE EVERY 1 SECOND STARTS '2017-08-22 11:57:00' ENDS '2017-08-22 12:00:00'
    ON COMPLETION PRESERVE 
    ENABLE 
    COMMENT '每隔一秒向test表插入记录'
    DO INSERT INTO test VALUES(NULL, now());
    

    我们指定时间来向test表插入一条记录:

    DROP EVENT IF EXISTS event_test2;
    CREATE EVENT event_test2
    ON SCHEDULE AT '2017-08-22 12:01:00'
    ON COMPLETION PRESERVE 
    ENABLE 
    COMMENT '指定时间向test表插入记录'
    DO INSERT INTO test VALUES(999999, now());
    

  • 相关阅读:
    力扣238.除自身以外数组的乘积 & 剑指offer 51.构建乘积数组
    网易的Airtest
    ZOOKEEPER
    Apache和Nginx负载均衡集群及测试分析
    mysql——创建索引、修改索引、删除索引的命令语句
    sql-索引的作用
    ADB连接手机的两种方式(usb数据线连接和wifi连接)
    adb shell dumpsys 命令
    count(*) 和 count(1)和count(列名)区别
    博客园页面设置
  • 原文地址:https://www.cnblogs.com/jkko123/p/7410974.html
Copyright © 2011-2022 走看看