Mysql event時間觸發器,實現定時修改某些符合某一條件的某一字段




mysql可以實現定時觸發功能,比如說定於某某時間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)>=1and status=0;

    END

|

假設有一個order表,並且表裏有一個status字段和一個date字段,現在將date中的時間距現在時間超過1天的並且狀態status=0的這條數據的狀態status改成1。

 

2.創建定時器取名爲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();

創建一個定時器,每間隔1秒觸發一次事件,即每個一秒執行一次上面定義的e_test這個存儲過程。

 

3.這個是最簡單但是也是最重要的,我們要手動的啓動這個定時器,要不然是沒法工作的。

ALTER EVENT event_test ON  

COMPLETION PRESERVE ENABLE; 

 

最後提醒一點,創建存儲過程與創建定時器代碼要分開執行,否則會報錯,暫時還不知道爲什麼,個人以爲這個可能是數據庫創建好存儲過程需要一定的緩衝時間來做好準備,我們要認爲的給他留出這個時間。當然這個時間對數據庫來說是一定的時間,但是對於我們來說僅僅是眨眼之間的功夫,只要分開兩次執行時間就足夠了。

個人的一點體會,希望對大家有幫助。


個別環境喲經常檢查show variables like '%event_scheduler%';,確保此數據庫權限已開就ok了

開啓event_scheduler sql指令:
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;
相反,關閉event_scheduler指令:

SET GLOBAL event_scheduler = OFF;
SET @@global.event_scheduler = OFF;
SET GLOBAL event_scheduler = 0;
SET @@global.event_scheduler = 0;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章