天天看點

MySQL event 計劃任務示例

在開發過程中遇到過排行榜的問題,曾經想用 mysql 的 event 計劃任務去做,每天讓資料庫定期更新資料,程式隻需要拉更新後的資料即可。但是,這有幾個問題:

1、如果資料量很大的話,資料庫的執行時間是不确定的,而 mysql 似乎沒有主動通知程式的機制,這就讓程式很被動,什麼時候去拉資料合理呢?

2、mysql 的 event 機制是在執行之後會計算目前到下次執行中間還需多少秒,計算一次數值而已,然後走完這麼多秒後再次執行,并不是定點執行,這樣如果伺服器重新開機或修改時間就會錯亂,也不友善測試(測試一般會用修改伺服器時間來測)。

雖然 event 是将要執行的資料庫語句編譯後存入資料庫的,可以減少每次編譯語句的時間,但基于以上兩點,它并不适合用于排行榜的更新,最後選擇了存儲過程。不過,event 計劃任務還是有很大的用處的,作為一個知識點也值得我們學習,下面是一個執行個體:

-- 設定時區并設定計劃事件排程器開啟,也可以 event_scheduler = ON
set time_zone = '+8:00';
set GLOBAL event_scheduler = 1;

-- 設定該事件使用或所屬的資料庫base資料庫
use test;

-- 如果原來存在該名字的任務計劃則先删除
drop event if exist test_update;

-- 設定分隔符為 '$$' ,mysql預設的語句分隔符為 ';' ,這樣在後續的 create 到 end 這段代碼都會看成是一條語句來執行
DELIMITER $$

-- 建立計劃任務,設定第一次執行時間為'2012-11-15 10:00:00',并且每天執行一次
create event test_update 
on schedule every day starts timestamp '2012-11-15 10:00:00'
do

-- 開始該計劃任務要做的事
begin

-----------------------------------
-- do something 編寫你的計劃任務要做的事
-----------------------------------

-- 結束計劃任務
end $$

-- 将語句分割符設定回 ';'
DELIMITER ;