自MySQL5.1.6起,增加了一个非常有特色的功能-事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总、数据备份等等)。更值得一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux的cron或Windows下的任务计划)只能精确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。
1、在使用这个功能之前必须确保event_scheduler已开启,可执行
SET GLOBAL event_scheduler = 1;
2、要查看当前是否已开启事件调度器,可执行如下SQL:
SHOW VARIABLES LIKE 'event_scheduler';
注:以下为其他常用命令
ALTER EVENT eventName ON COMPLETION PRESERVE DISABLE; --关闭事件任务
ALTER EVENT eventName ON COMPLETION PRESERVE ENABLE; --开启事件任务
SHOW EVENTS; --查看事件任务
具体创建语法如下
CREATE EVENT [IFNOT EXISTS] event_name
ONSCHEDULE schedule
[ONCOMPLETION [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}
首先来看一个简单的例子来演示每秒插入一条记录到数据表
CREATE TABLE aaa(timeline TIMESTAMP);
CREATE EVENT e_test_insert
ON SCHEDULE EVERY 1 SECOND
DO INSERT aaa VALUE(CURRENT_TIMESTAMP);
等待3秒之后,再执行查询看看,可以看到aaa表会有3条数据
再来看看修改他的语法
ALTER EVENT event_name
[ONSCHEDULE schedule]
[RENAME TOnew_event_name]
[ON COMPLETION [NOT] PRESERVE]
[COMMENT 'comment']
[ENABLE | DISABLE]
[DO sql_statement]
以下是几个简单例子
ALTER EVENT e_test DISABLE; -- 临时关闭事件
ALTER EVENT e_test ENABLE; -- 开启事件
ALTER EVENT e_test ON SCHEDULE EVERY 5 DAY; -- 将任务改为5天执行一次:
最后是删除事件语法
DROP EVENT [IF EXISTS] event_name