mysql 觸發器和預存程序組合使用,實現定時觸發操作

來源:互聯網
上載者:User

標籤:

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)>=1 and 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; 

 

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

mysql 觸發器和預存程序組合使用,實現定時觸發操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.