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;