mysqlインスタント/タイミングトリガイベント(mysql 5.1)

3372 ワード

一、紹介
イベントスケジューラはMySQL 5.1に追加されたもう一つの特色機能で、オペレーティングシステムのタスクスケジューラでしかできない一部のタイミング機能に取って代わるタイミングタスクスケジューラとして使用できます.また、MySQLのイベントスケジューラは、リアルタイム性が要求される環境で非常に実用的なタスクを毎秒実行できます.
イベントスケジューラはタイミングトリガで実行され、この角度から「一時的なトリガ」とも呼ばれる.トリガは、テーブルで生成されたイベントに対していくつかの文を実行するだけで、イベントスケジューラは、ある(間隔)時間にいくつかの文を実行します.イベントは、特定のスレッドによって管理されます.つまり、いわゆる「イベントスケジューラ」です.イベントスケジューラを有効にすると、SUPER権限を持つアカウントがSHOW PROSCESSLISTを実行すると、このスレッドが表示されます.グローバル変数event_を設定することでschedulerの値を使用すると、イベントスケジューラが有効になっているかどうかを動的に制御できます.
この機能を使用する前にevent_を確認する必要があります.schedulerがオープンし、実行可能
SET GLOBAL event_scheduler = 1;

または
SET GLOBAL event_scheduler = ON;

をオンにします.
mysqld ... --event_scheduler=1
現在イベントスケジューラが起動しているかどうかを確認するには、次のSQLを実行します.
SHOW VARIABLES LIKE 'event_scheduler';

または
SELECT @@event_scheduler;

二、イベントの作成(CREATE EVENT)
まず文法を見てみましょう.
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} 

1)まず簡単な例を見て、1秒間に1本ずつデータテーブルに記録する
USE test;
CREATE TABLE aaa (timeline TIMESTAMP);
CREATE EVENT e_test_insert
ON SCHEDULE EVERY 1 SECOND
DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);

3秒待ってから、クエリーを実行してみます.
SELECT * FROM aaa;
+———————+
| timeline |
+———————+
| 2007-07-18 20:44:26 |
| 2007-07-18 20:44:27 |
| 2007-07-18 20:44:28 |
+———————+ 

2)5日後にtestテーブルを空にします.
CREATE EVENT e_test
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;

4)毎日定時にtest表を空にする:
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
DO TRUNCATE TABLE test.aaa;

5)5日後毎日定時クリアtest表を開く:
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;

6)毎日定時にtest表を空にし、5日後に実行を停止する.
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;

7)5日後に毎日定時クリアtest表を開き、1ヶ月後に実行を停止する:
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
DO TRUNCATE TABLE test.aaa;
[ON COMPLETION [NOT] PRESERVE]#                   ,   NOT PRESERVE。 

8)毎日定時にtestテーブルを空にします(一度だけ実行し、タスクが完了したらイベントを終了します):
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ON COMPLETION NOT PRESERVE
DO TRUNCATE TABLE test.aaa;

[ENABLE|DISABLE]ただし、イベント作成後のステータスがオンまたはオフになっているかどうかを設定します.デフォルトはENABLEです.
[COMMENT'comment']は、このイベントにコメントを付けることができます.