天天看點

MySQL事件排程器 CREATE EVENT

MySQL從5.1開始支援Event功能,有點類似于MsSQL的Job,可以定時自動執行資料彙總。

【文法】

CREATE EVENT [IF NOT EXISTS] event_name  

    ON SCHEDULE schedule  

    [ON COMPLETION [NOT] PRESERVE]  

    [ENABLE | DISABLE]  

    [COMMENT 'comment']  

    DO sql_statement;  

schedule:  

    AT timestamp [+ INTERVAL interval]  

  | EVERY interval [STARTS timestamp] [ENDS timestamp]  

interval:  

    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |  

              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |  

              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}  

其中,

event_name:定時器名,最大長度64個字元,若未指定,則預設為目前的MySQL使用者名(不區分大小寫);

schedule:限定執行時間;

ON COMPLETION [NOT] PRESERVE:表示是否需要循環複用這個Event;

sql_statement:要執行的SQL語句(也可以使用存儲過程代替傳統的SQL語句);

comment:對該時間排程器的一個注釋,最大長度64個字元;

【關閉事件】

ALTER EVENT event_name ON  

COMPLETION PRESERVE DISABLE;  

【開啟事件】

COMPLETION PRESERVE ENABLE;  

【删除事件】

DROP EVENT [IF EXISTS] event_name  

【注意】:要使用定時器,MySQL的常量GLOBAL event_scheduler必須為on或者是1.

【範例】

1. 每天淩晨1點開始執行資料更新:

CREATE EVENT [IF NOT EXISTS] E_testEvent_1   

    ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)   

    ON COMPLETION PRESERVE ENABLE   

    DO  

        UPDATE _T_test SET col= 2 where ValidityDate < now();  

2. 每月第一天淩晨1點開始執行資料更新(使用存儲過程):

CREATE EVENT E_testEvent_2   

    ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR)  

    ON COMPLETION PRESERVE ENABLE  

    BEGIN  

        CALL P_testProcedureName();  

    END  

3. 每季度第一天淩晨1點開始執行資料更新:

CREATE EVENT E_testEvent_3    

    ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),'-',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),INTERVAL 1 QUARTER),INTERVAL 2 HOUR)  

【一些Event相關語句】:

1. 檢視是否開啟定時器

SHOW VARIABLES LIKE '%sche%';  

2. 開啟定時器 0:off 1:on

SET GLOBAL event_scheduler = 1; 

<a href="http://blog.csdn.net/abandonship/article/details/7050285" target="_blank">http://blog.csdn.net/abandonship/article/details/7050285</a>

本文轉自 liang3391 51CTO部落格,原文連結:http://blog.51cto.com/liang3391/843182