MySQLイベントスケジューラCREATE EVENT


転載:[url]http://blog.csdn.net/abandonship/article/details/7050285[/url]
MySQLは5.1からEvent機能をサポートしています。MsSQLのJobに似ています。タイミングに合わせてデータのまとめを自動実行できます。
【文法】
[sql] view plaincopyprint?
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}
そのうち
イベントname:タイマー名、最大長さ64文字、未指定の場合、デフォルトは現在のMySQLユーザ名(大文字と小文字を区別しない)です。
schedule:実行時間を限定する。
ON COMPLETION[NOT]PRESERVE:このEventを循環多重する必要があるかどうかを示します。
sqlstatement:実行するSQL文(従来のSQL文の代わりに格納プロセスを使用しても良い)。
コメント:この時間スケジューラに対する注釈の最大長さは64文字です。
【クローズイベント】
[sql] view plaincopyprint?
ALTER EVENT event_name ON
COMPLETION PRESERVE DISABLE;
【オープンイベント】
[sql] view plaincopyprint?
ALTER EVENT event_name ON
COMPLETION PRESERVE ENABLE;
【イベントの削除】
[sql] view plaincopyprint?
DROP EVENT [IF EXISTS] event_name
【注意】:タイマーを使用するには、MySQLの定数GLOBAL event_schedulerはonまたは1.
【例】
1.毎日午前1時からデータの更新を行います。
[sql] view plaincopyprint?
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時からデータ更新(保存プロセスを使う)を開始します。
[sql] view plaincopyprint?
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
DO
BEGIN
CALL P_testProcedureName();
END
3.四半期の最初の日の午前1時からデータの更新を行います。
[sql] view plaincopyprint?
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)
ON COMPLETION PRESERVE ENABLE
DO
UPDATE _T_test SET col= 2 where ValidityDate < now();
【いくつかのイベントに関する語句】
1.タイマーがオンされているか確認する
[sql] view plaincopyprint?
SHOW VARIABLES LIKE '%sche%';
2.タイマーをオンする0:off 1:on
[sql] view plaincopyprint?
SET GLOBAL event_scheduler = 1;