mysql事件和计划任务

1. 定义

CREATE
    [DEFINER = { user | CURRENT_USER }]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'string']
    DO event_body;

schedule:
    AT timestamp [+ INTERVAL interval] ...
  | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]

interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

举个栗子:

CREATE DEFINER=`root`@`localhost` 
 EVENT `banlance_deduct` 
 ON SCHEDULE EVERY 10 SECOND 
 STARTS '2018-07-30 15:58:49' 
 ON COMPLETION PRESERVE DISABLE 
 DO 
 delete user_log order by create_time limit 10;

2. interval符合时间类型
 

SELECT DATE_SUB('2005-01-01 00:00:00',INTERVAL '1 1:1:1' DAY_SECOND); #  2004-12-30 22:58:59
 SELECT DATE_ADD('1900-01-01 00:00:00',INTERVAL '-1 10' DAY_HOUR); # 1899-12-30 14:00:00
 SELECT DATE_ADD('1900-01-01 00:00:00',INTERVAL '1 10' DAY_HOUR); # 1900-01-02 10:00:00 


3. 运行类型

3.1 AT只运行一次


-- 当前时间加一周 执行 然后停止   

AT CURRENT_TIMESTAMP + INTERVAL 1 WEEK

 
-- 指定时间加一周 执行 然后停止

AT '2018-06-15 18:00:00' + INTERVAL 1 WEEK 

3.2 EVERY 每隔多久运行一次

-- 每天2点

EVERY 1 DAY STARTS '2018-07-30 02:00:00'

-- 每秒 | 分 | 小时 | 天 | 周 | 月 | 季 | 年

EVERY 1 SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR

-- 每分秒 从2018-07-30 01:00:00 开始 每天1点1分 执行

EVERY '01:01' HOUR_MINUTE STARTS '2018-07-30 01:00:00'  

-- 每分秒 从2018-07-31 12:00:00 开始 每小时的 1分1秒 执行

EVERY '01:01' MINUTE_SECOND STARTS '2018-07-31 12:00:00'

-- 每隔5秒,从 2018-07-01 15:00:00 起50秒钟后开始,并于2018-08-01 15:00:00起15秒钟后结束

EVERY 5 SECOND STARTS '2018-07-01 15:00:00' + INTERVAL 50 SECOND ENDS '2018-08-01 15:00:00' + INTERVAL 15 SECOND

-- 每十二个小时,从现在起50 分钟后开始,并于现在起1个星期后结束

ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 50 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 1 WEEK


4. 任务

开启计划任务

set global event_scheduler = on;

如果要永久开启,需要在 my.cnf 中添加,并重新启动

event_scheduler=ON

启动事件

alter event banlance_deduct on completion preserve disable ;


关闭事件

alter event banlance_deduct on completion preserve enable ;

查看现有的事件

show events;

猜你喜欢

转载自blog.csdn.net/wujiangwei567/article/details/81298413