MySQL中的事件调度器,可以用来执行定时任务。
一、开启 事件调度默认是关闭的,开启可执行。 查看事件调度器是否开启: 1
2
| SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
|
开启事件调度器
SET GLOBAL event_scheduler=1;
SET GLOBAL event_scheduler=ON;
或者在my.ini文件中加上event_scheduler=1 或者在启动命令后加上"-event_scheduler=1"
查看现有的事件调度器
查看事件调度器的状态
二、创建事件调度器 1
2
3
4
5
6
| 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] AT TIMESTAMP [+ INTERVAL INTERVAL]:只在指定的时间点执行; EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]:间隔多长时间执行; INTERVAL:时间间隔,可以精确到秒。 quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH event_name:是你要创建的事件名称 ON COMPLETION [NOT] PRESERVE:结束后是否保存,默认不保存,一旦执行完,事件就被删除了,因此强烈建议此参数设为 ON COMPLETION PRESERVE。
DO sql_statement:可以是DML语句、DCL语句或者调用存储过程。 三、修改事件调度器 1
2
3
4
5
6
| ALTER EVENT event_name
[ON SCHEDULE schedule]
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[COMMENT 'comment']
[ENABLE | DISABLE] [DO sql_statement]
|
四、事件调度器的例子 例1:1分钟后添加数据 1
2
3
4
5
6
| create event if not exists eve_test
ON SCHEDULE AT current_timestamp() + interval 1 minute
ON COMPLETION PRESERVE
do
insert into test_20161107(t_day)
values(now());
|
例2:更改成每隔1分钟添加数据 1
2
3
4
5
6
| alter event eve_test
on schedule every 1 minute starts now()
on completion preserve
enable
do insert into test_20161107(t_day)
values(now());
|
修改之后使用show events 查看事件调度器的状态; 例3:调用存储过程 1
2
3
4
5
| alter event eve_test
on schedule every 1 minute starts now()
on completion preserve
enable
do call proc_test();
|
五、删除 DROP EVENT [IF EXISTS] event_name;
|