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