MySQL定時觸發(fā)器
mysql可以實現定時觸發(fā)功能泛粹,比如說定于某某時間mysql數據庫做什么工作,或每隔多長時間做什么工作。
第二種情況應用還是比較廣的食茎,比如說我希望每天檢查一下我的數據信息,超過一個月的無用信息清除以騰出空間供其他存儲數據使用馏谨;或者相隔一段時間更新一下數據等等别渔。
下面討論下這種情況,給出一個例子供大家參考:
1.首先定義一個存儲過程取名為e_test惧互,注意豎線(“|”)一定不能丟
DELIMITER |
DROP PROCEDURE IF EXISTS e_test |
CREATE PROCEDURE e_test()
BEGIN
update order set status=1 where to_days(now())-TO_DAYS(date)>=1 and status=0;
END
|
假設有一個order表哎媚,并且表里有一個status字段和一個date字段,現在將date中的時間距現在時間超過1天的并且狀態(tài)status=0的這條數據的狀態(tài)status改成1喊儡。
2.創(chuàng)建定時器取名為event_test
SET GLOBAL event_scheduler = 1;
CREATE EVENT IF NOT EXISTS event_test
ON SCHEDULE EVERY 1 SECOND
ON COMPLETION PRESERVE
DO CALL e_test();
創(chuàng)建一個定時器拨与,每間隔1秒觸發(fā)一次事件,即每個一秒執(zhí)行一次上面定義的e_test這個存儲過程艾猜。
3.這個是最簡單但是也是最重要的买喧,我們要手動的啟動這個定時器,要不然是沒法工作的匆赃。
ALTER EVENT event_test ON
COMPLETION PRESERVE ENABLE;
最后提醒一點淤毛,創(chuàng)建存儲過程與創(chuàng)建定時器代碼要分開執(zhí)行,否則會報錯炸庞,暫時還不知道為什么钱床,個人以為這個可能是數據庫創(chuàng)建好存儲過程需要一定的緩沖時間來做好準備,我們要認為的給他留出這個時間埠居。當然這個時間對數據庫來說是一定的時間查牌,但是對于我們來說僅僅是眨眼之間的功夫,只要分開兩次執(zhí)行時間就足夠了滥壕。
——————————————————————————————————————————–
1纸颜、觸發(fā)器是update后激發(fā)的,我想你需要的是mysql計劃任務绎橘。
2胁孙、計劃任務狀態(tài)
show variables like ‘%event%’;
3唠倦、使用下列的任意一句開啟計劃任務:
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1; — 0代表關閉
SET @@global.event_scheduler = 1;
4、創(chuàng)建event語法
help create event
5涮较、實例
實例0:
每5分鐘刪除sms表上面ybmid為空白且createdate距現時間超過5分鐘的數據稠鼻。
USE test;
CREATE EVENT event_delnull
ON SCHEDULE
EVERY 5 MINUTE STARTS ‘2012-01-01 00:00:00’ ENDS ‘2012-12-31 00:00:00′
DO
DELETE FROM sms WHERE ybmid=” AND TIMEDIFF(SYSDATE(),createdate)>’00:05:00’;