事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功能。而且 MySQL 的事件调度器可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。
事件调度器是定时触发执行的,在这个角度上也可以称作是”临时的触发器”。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的”事件调度器”。启用事件调度器后,拥有 SUPER 权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。通过设定全局变量event_scheduler 的值即可动态的控制事件调度器是否启用。
在使用这个功能之前必须确保event_scheduler已开启,可执行
1
SETGLOBALevent_scheduler = 1;
或
1
SETGLOBALevent_scheduler = ON;
来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如:
1
mysqld ... --event_scheduler=1
要查看当前是否已开启事件调度器,可执行如下SQL:
1
SHOW VARIABLES LIKE'event_scheduler';
或
1
SELECT@@event_scheduler;
二、创建事件(CREATE EVENT)
先来看一下它的语法:
1
CREATEEVENT [IF NOTEXISTS] event_name
2
ONSCHEDULE schedule
3
[ONCOMPLETION [NOT] PRESERVE]
4
[ENABLE | DISABLE]
5
[COMMENT 'comment']
6
DO sql_statement;
schedule:
AT TIMESTAMP [+ INTERVAL INTERVAL]
| EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]