web-dev-qa-db-ja.com

毎日特定の時間のMySQLイベントスケジューラ

これが私のクエリです

CREATE EVENT reset  ON SCHEDULE AT TIMESTAMP  DO UPDATE `ndic`.`students` SET `status` =  '0';  

毎日午後1時にステータスを「0」に更新するにはどうすればよいですか。 TIMESTAMPの代わりに何を置くべきですか?

29
gin

CREATE EVENTに関するドキュメント は非常に良いですが、それを正しくするのに時間がかかります。

2つの問題があります。1つ目は、イベントを再帰的にする、2つ目は毎日13:00に実行する

この例では、定期的なイベントを作成します。

CREATE EVENT e_hourly
    ON SCHEDULE
      EVERY 1 HOUR
    COMMENT 'Clears out sessions table each hour.'
    DO
      DELETE FROM site_activity.sessions;

コマンドラインMySQLクライアントでは、次のことができます。

SHOW EVENTS;

これは、各イベントをそのメタデータとともに一覧表示します(1回だけ実行するか、定期的に実行するかなど)。

2番目の問題:定期的なイベントを特定のスケジュール項目にポイントする

さまざまな種類の表現を試してみると、次のようなものを思いつくことができます。

CREATE EVENT IF NOT EXISTS `session_cleaner_event`
ON SCHEDULE
  EVERY 13 DAY_HOUR
  COMMENT 'Clean up sessions at 13:00 daily!'
  DO
    DELETE FROM site_activity.sessions;
31
olleolleolle

これはあなたの仕事には遅すぎるかもしれませんが、ここに私がそれをした方法があります。毎日午前1時に何かを実行したい-これはあなたがやっていることと似ていると思う。ここに私がそれをした方法があります:

CREATE EVENT event_name
  ON SCHEDULE
    EVERY 1 DAY
    STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR)
  DO
    # Your awesome query
31
user3155099

私のユースケースは似ていますが、ログクリーンアップイベントを毎晩午前2時に実行したいという点が異なります。上記のコメントで述べたように、DAY_HOURは機能しません。私の場合、最初の日を逃す可能性はあまりありません(そして午前2時に実行する場合、明日の午前2時にほとんど常に次の午前2時になります)。

CREATE EVENT applog_clean_event
ON SCHEDULE 
    EVERY 1 DAY
    STARTS str_to_date( date_format(now(), '%Y%m%d 0200'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
COMMENT 'Test'
DO 
15
Adam
DROP EVENT IF EXISTS xxxEVENTxxx;
CREATE EVENT xxxEVENTxxx
  ON SCHEDULE
    EVERY 1 DAY
    STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR)
  DO
    --process;

¡重要!->

SET GLOBAL event_scheduler = ON;
11
mercu

これを試して

CREATE EVENT event1
ON SCHEDULE EVERY '1' DAY
STARTS '2012-04-17 13:00:00' -- should be in the future
DO
-- your statements
END
9
Naveen Kumar
CREATE EVENT test_event_03
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
   INSERT INTO messages(message,created_at)
   VALUES('Test MySQL recurring Event',NOW());
1
aymen messaoudi