1. 定時任務(Event)簡介
自MySQL5.1.6起,增加了一個非常有特色的功能-事件排程器(Event Scheduler),可以用做定時執行某些特定任務(例如:删除記錄、對資料進行彙總、資料備份等等),來取代原先隻能由外部程式的計劃任務來執行的工作。
2. 定時任務(Event)優缺點
優點:一些對于資料的定時操作不再依賴于外部程式,而可以直接利用資料庫本身提供的功能,增加了快捷友善性。Mysql的定時任務可以實作每秒鐘執行1個任務,而作業系統的計劃任務(如:Linux的cron或Windows下的任務計劃)隻能精确到每分鐘執行一次,這在對實時性要求高的環境下就非常實用。
缺點:定時觸發,不可以調用
3. 具體操作
(1) 檢視資料庫定時政策是否開啟,輸入以下指令:
show variables like '%event_sche%';
運作結果如下:
如果是OFF表示沒有開啟,修改成ON,輸入以下指令:
set global event_scheduler=1;
修改後查再看一次據庫定時政策是否開啟。
(2) 建立procedure(存儲過程),比如建立demo_insert作為執行體:
create procedure demo_insert()
BEGIN
INSERT INTO testdata set name="test2",shuju=20;
END
提示:begin和end中間放要定時處理的sql用 ;結尾,可以放多個sql
(3) 建立定時任務,比如建立名為demo01的定時任務:
create event demo01
-- 每10分鐘執行一次
ON SCHEDULE EVERY 10 MINUTE
on completion preserve disable
-- 任務使用第二點定義的demo_insert作為執行體
do call demo_inser();
(4) 檢視任務建立情況:
SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;
(5) 把指定的任務開啟:
ALTER EVENT demo01 ON COMPLETION PRESERVE ENABLE;
提示:
關閉指定的任務指令為:ALTER EVENT demo01 ON COMPLETION PRESERVE DISABLE;
删除指定的任務指令為:drop event demo01;
(6) 檢視指定任務的詳細資訊:
SELECT * FROM information_schema.EVENTS WHERE event_name='demo01';
4. 注意事項:
(1) event_scheduler的修改會随着資料庫伺服器重新開機恢複到原來狀态,設定開機自動開啟需要配置mysql的配置檔案my.ini添加下面的一行配置:
[mysqld]
event_scheduler=ON
(2) 對于任務的執行方式總結了一些時間控制的指令:
5. 用navicat建立(推薦)
如上圖左鍵點選建立事件。
建立事件中的定義一欄是寫執行sql的,可以包括一條或多條sql語句、存儲過程等,計劃一欄是定義事件觸發時間的。如下圖所示:
打開計劃欄:
上圖的參數說明:
AT:表示該事件隻執行一次,可以設定一個具體的時間,也可以如圖中current_timestamp代表目前時間(預設),後面可以加上一個時間間隔INTERVAL,表示在這個時間多久以後後事件發生,表示延遲觸發時間。
EVERY:循環執行該事件,其中STARTS子句用于指定開始時間。
ENDS:子句用于指定結束時間。
INTERVAL:表示從現在開始時間延遲多久以後的一個時間點,其值由一個數值和機關構成。例如,使用“1 week”表示41周後;使用“‘6:30' hour_minute”表示6小時30分鐘後。事件的間隔的距離用date_add()函數來支配。
補充說明:INTERVAL中包含的時間機關如下:
year | quarter | month | day | hour | minute | week | second | year_month | day_hour | day_minute | day_second | hour_minute | hour_second | minute_second
舉例1:往testdata表中插入2行資料,執行時間:2023-01-16 15:00:00
點選儲存,輸入定義的事件名。
上面定義的時間過後,查詢結果如下圖所示:
舉例2:從目前開始,每5秒往testdata表中插入2行資料,如下圖所示: