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;