mysql定時器既是mysql的事件,在實際開發中,我們有時候需要定時去執行一些操作,大部分人通過ScheduledExecutorService類去創建定時,這種如果遇到大數據的更新的時候,運行速度比較忙,這時候我們可以考慮使用mysql定時器去執行SQL腳本文件。
要使用mysql定時器。
首先必須啟動調度器“event_scheduler”。
查看當前是否已開啟事件計劃(調度器)有3種方法:
1) SHOW VARIABLES LIKE 'event_scheduler';
2) SELECT @@event_scheduler;
3) SHOW PROCESSLIST;
開啟事件計劃(調度器)開關有4種方法:
1) SET GLOBAL event_scheduler = 1;
2) SET @@global.event_scheduler = 1;
3) SET GLOBAL event_scheduler = ON;
4) SET @@global.event_scheduler = ON;
其次是創建定時器事件,可以通過sql創建,也可以安裝Navicat Premium(mysql客戶端)創建。
1)通過sql創建定時器事件:
create event if not exists eventJob
on schedule every 2 second STARTS '2015-07-14 00:00:00'
on completion PRESERVE
ENABLE
do call mypro();
上述sql腳本中“eventJob ”為定時器事件名稱,“mypro”為mysql函數或者存儲過程。sql腳本表示從 '2015-07-14 00:00:00'開始,每2秒鐘執行mypro()函數一次。當然也可以設置結束時間。
2) 通過客戶端創建定時器事件:
如圖中所示,call關鍵字後是需要執行的函數或者存儲過程;狀態表示定時器事件的狀態,是否啟用,enable表示啟用,disable表示不啟用,可以手動設置也可以通過sql來進行設置; on completion設置為“PRESERVE”。
“計劃”中標簽中,主要是設置定時器的頻率和開始結束時間。AT表示,從當前mysql數據庫時間開始(這個時間是從啟動器啟用開始,即當狀態為“ENABLE”時),根據一定頻率的執行;EVERY是自定義開始時間和結束時間;相對來書EVERY比較靈活,使用方便。
最後,當然是設置定時器事件的狀態。
在上一步中,我們無論是sql創建還是客戶端創建都可以設置狀態,但是當我們沒有設置狀態或者說關閉定時器事件的時候,就需要執行sql
ALTER EVENT eventJob ON COMPLETION PRESERVE ENABLE; ---- 開啟事件
ALTER EVENT eventJob ON COMPLETION PRESERVE DISABLE; ---- 關閉事件