mysql定時器,mysql定時任務
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 existseventJob
on schedule every 2 second STARTS '2015-07-14 00:00:00'
on completion PRESERVE
ENABLE
do callmypro();
上述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 EVENTeventJob ON COMPLETION PRESERVE DISABLE; ---- 關閉事件
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。