• mysql 定时任务


    mysql 5.1以上支持定时任务。

    SHOW VARIABLES LIKE 'event_scheduler';   检查是否已开启该功能

    开启计划任务功能:

    SET GLOBAL event_scheduler = 1;
    或SET GLOBAL event_scheduler = ON;

    或者

    my.ini or my.cnf 中的
    [mysqld]
    添加 event_scheduler=ON

    先来看一下它的语法:

    CREATE EVENT [IF NOT EXISTS] event_name
      ON SCHEDULE schedule
      [ON COMPLETION [NOT] PRESERVE]
      [ENABLE | DISABLE]
      [COMMENT 'comment']
      DO sql_statement;

    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}

    #单次计划任务: AT 时戳 
    #重复的计划任务 EVERY 时间(单位)的数量 时间单位 [STARTS 时戳][ENDS 时戳] 
    在两种计划任务中,时戳可以是任意的TIMESTAMP 和DATETIME 数据类型,要求提供的是将来的时间(大于CURRENT_TIMESTAMP),而且小于Unix时间的最后时间(等于或小于'2037-12-31 23:59:59') 
    时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND 
    3.[ON COMPLETION [NOT] PRESERVE] COMPLETION 当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而声明PRESERVE的作用是使事件在执行完毕后不会被Drop掉 
    4.[ENABLE|DESABLE] ENABLE  开启事件 DESABLE 关闭事件 
    5.COMMENT 注释 
    6.DO sql_statement 执行的sql语句

    USE test;
    CREATE TABLE aaa (timeline TIMESTAMP);
    CREATE EVENT e_test_insert
    ON SCHEDULE EVERY 1 SECOND 
    DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);
    等待3秒钟后,再执行查询看看:

    mysql> SELECT * FROM aaa;
    +---------------------+ 
    | timeline            | 
    +---------------------+ 
    | 2007-07-18 20:44:26 | 
    | 2007-07-18 20:44:27 | 
    | 2007-07-18 20:44:28 | 
    +---------------------+
    2) 5天后清空test表:

    CREATE EVENT e_test
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
    DO TRUNCATE TABLE test.aaa;
    3) 2007年7月20日12点整清空test表:

    CREATE EVENT e_test
    ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
    DO TRUNCATE TABLE test.aaa;
    4) 每天定时清空test表:

    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    DO TRUNCATE TABLE test.aaa;
    5) 5天后开启每天定时清空test表:

    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
    DO TRUNCATE TABLE test.aaa;
    6) 每天定时清空test表,5天后停止执行:

    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
    DO TRUNCATE TABLE test.aaa;
    7) 5天后开启每天定时清空test表,一个月后停止执行:

    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
    ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
    DO TRUNCATE TABLE test.aaa;
    [ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。
    8) 每天定时清空test表(只执行一次,任务完成后就终止该事件):

    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    ON COMPLETION NOT PRESERVE
    DO TRUNCATE TABLE test.aaa;
    [ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。
    [COMMENT ‘comment’]可以给该事件加上注释。

    三、修改事件(ALTER EVENT)
    ALTER EVENT event_name
      [ON SCHEDULE schedule]
      [RENAME TO new_event_name]
      [ON COMPLETION [NOT] PRESERVE]
      [COMMENT 'comment']
      [ENABLE | DISABLE]
      [DO sql_statement]
    1) 临时关闭事件

    ALTER EVENT e_test DISABLE;
    2) 开启事件

    ALTER EVENT e_test ENABLE;
    3) 将每天清空test表改为5天清空一次:

    ALTER EVENT e_test
    ON SCHEDULE EVERY 5 DAY;
    四、删除事件(DROP EVENT)
    语 法很简单,如下所示:

    DROP EVENT [IF EXISTS] event_name
    例如删除前面创建的e_test事件

    DROP EVENT e_test;
    当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS

    DROP EVENT IF EXISTS e_test;

     create event test
    ON SCHEDULE AT '2007-09-01 12:00:00' + INTERVAL 1 DAY
    on completion not preserve 
    do insert into yyy values('hhh','uuu');

    解释:从2007-09-01开始,每天对表yyy在12:00:00进行一个插入操作。而且只执行一次(on completion not preserve )

    我的计划任务为:

    create event sysplan
    ON SCHEDULE AT '2010-05-22 23:00:00' + INTERVAL 1 DAY
    on completion not preserve 
    do truncate table bjproj.ae_tmp;

    压力测试数据生成:没分钟插入一条数据

    CREATE EVENT add_product ON SCHEDULE EVERY 1 SECOND  DO INSERT INTO test.products (`product`,`addtime`) VALUES (RAND()*50000+50000,CURRENT_TIMESTAMP) ;

  • 相关阅读:
    两个排序数组的第k小——Java实现
    单向链表反转——递归与非递归实现
    白话HMM系列3——维特比算法求解隐藏序列
    白话Shell命令1——top查看Linux进程
    白话HMM系列2——Baum Welch算法的进阶
    Hadoop原理深度剖析系列1——Hadoop的基本知识
    白话HMM系列1——从一个缩略语还原的例子说起
    软件工程第二次作业
    Hello World!
    查看帐号授权信息
  • 原文地址:https://www.cnblogs.com/xiamibk/p/4648968.html
Copyright © 2020-2023  润新知