mysqlストアド・プロシージャ+イベント実行タイミング・タスク

3835 ワード

mysqlはどのようにしてストレージ・プロシージャにeventがオンになっているかどうかを確認します:show variables like'%sche%';イベント計画を開く:set global event_scheduler=1; イベントタスクを閉じる:alter event e_test ON COMPLETION PRESERVE DISABLE; 口座開設イベントタスク:alter event e_test ON COMPLETION PRESERVE ENABLE;
単純な例テーブルCREATE TABLE test(endtime DATETIME)を作成します.
ストレージプロセスtest CREATE PROCEADURE test()BEGIN update examinfo SET endtime=now()WHERE id=14を作成します.END;
   event e_test 
 CREATE EVENT if not exists e_test 
      on schedule every 30 second 
      on completion preserve 
 do call test(); 

   30        test,        examinfo  id=14    endtime    
  • まず簡単な例を見て、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秒待ってから、クエリーを実行してみます.
    mysql> SELECT * FROM aaa; +---------------------+ | timeline | +---------------------+ | 2007-07-18 20:44:26 | | 2007-07-18 20:44:27 | | 2007-07-18 20:44:28 | +---------------------+
  • 5日後にtest表をクリア:
  • CREATE EVENT e_test ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa;
  • 2007年7月20日12時整空test表:
  • CREATE EVENT e_test ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00' DO TRUNCATE TABLE test.aaa;
  • 毎日定時クリアtest表:
  • CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY DO TRUNCATE TABLE test.aaa;
  • 5日後毎日定時クリアtest表を開く:
  • CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa;
  • 毎日定時クリアtest表、5日後停止:
  • CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa;
  • 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です.
  • 毎日定時クリアtestテーブル(1回のみ実行し、タスク完了後にそのイベントを終了):
  • CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY ON COMPLETION NOT PRESERVE DO TRUNCATE TABLE test.aaa; [ENABLE|DISABLE]ただし、イベント作成後のステータスがオンまたはオフになっているかどうかを設定します.デフォルトはENABLEです.[COMMENT‘comment’]は、このイベントにコメントを付けることができる.
    三、修正イベント(ALTER EVENT)ALTER EVENT event_name [ON SCHEDULE schedule] [RENAME TO new_event_name] [ON COMPLETION [NOT] PRESERVE] [COMMENT 'comment'] [ENABLE | DISABLE] [DO sql_statement]
  • 臨時閉鎖事件
  • ALTER EVENT e_test DISABLE;
  • オープンイベント
  • ALTER EVENT e_test ENABLE;
  • 1日あたりのクリアリストを5日間に1回クリア:
  • ALTER EVENT e_test ON SCHEDULE EVERY 5 DAY; 四、削除イベント(DROP EVENT)の文法は簡単で、以下の通りである.
    DROP EVENT [IF EXISTS] event_name例えば前に作成したe_を削除するtestイベント
    DROP EVENT e_test; もちろんこのイベントが存在することが前提ですが、そうでないとERROR 1513(HY 000):Unknown eventエラーが発生するので、IF EXISTSを加えたほうがいいです
    DROP EVENT IF EXISTS e_test;
    create event test ON SCHEDULE AT '2007-09-01 12:00:00' + INTERVAL 1 DAY on completion not preserve do insert into yyy values('hhh','uuu');
    説明:2007-09-01から毎日テーブルyyyyを12:00:00に挿入します.しかも一度だけ実行(on completion not preserve)
    私の計画タスクは次のとおりです.
    create event sysplan ON SCHEDULE AT '2010-05-22 23:00:00' + INTERVAL 1 DAY on completion not preserve do truncate table bjproj.ae_tmp;
    三、グローバル変数event_を設定するschedulerの値を使用すると、イベントスケジューラが有効になっているかどうかを動的に制御できます.event_を表示するschedulerオープンmysql>SHOW VARIABLES LIKE'%event%';mysql>SET GLOBAL event_を開くように設定scheduler=ON; 四、例:毎分1本のログを挿入する:DELIMITER//CREATE EVENTuser_log_eventON SCHEDULE EVERY 1 MINUTE STARTS'2010-12-27 00:00:00'ON COMPLETION NOT PRESERVE ENABLE DO BEGIN INSERT INTOロゴSET addtime=NOW()END//呼び出しストレージプロセス:DELIMITER//CREATE EVENTuser_log_eventON SCHEDULE EVERY 1 DAY STARTS'2010-00-00 00:00'ON COMPLETION NOT PRESERVE ENABLE DO BEGIN CALL user_log_prov();END//