44

これが私のクエリです

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

毎日午後 1 時にステータスを「0」に更新するにはどうすればよいですか。

の代わりに何を使用できTIMESTAMPますか?

4

6 に答える 6

39

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;

これにより、各イベントがそのメタデータとともに一覧表示されます (一度だけ実行する必要があるか、または繰り返し実行する必要があるかなど)。

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;
于 2011-01-19T12:40:05.507 に答える
15

私のユース ケースは似ていますが、ログ クリーンアップ イベントを毎晩午前 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 
于 2013-01-31T09:01:57.093 に答える
14

これを試して

CREATE EVENT event1
ON SCHEDULE EVERY '1' DAY
STARTS '2012-04-17 13:00:00' -- should be in the future
DO
-- your statements
END
于 2012-04-17T12:32:48.350 に答える