MySQL中的事件调度器,可以用来执行定时任务。
一、开启
事件调度默认是关闭的,开启可执行。
查看事件调度器是否开启:
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"
查看现有的事件调度器
show events;
查看事件调度器的状态
show processlist;
二、创建事件调度器
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语句或者调用存储过程。
三、修改事件调度器
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分钟后添加数据
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分钟添加数据
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:调用存储过程
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;