これが私のクエリです
CREATE EVENT
RESET ON SCHEDULE AT TIMESTAMP DO
UPDATE `ndic`.`students`
SET `status` = '0';
毎日午後 1 時にステータスを「0」に更新するにはどうすればよいですか。
の代わりに何を使用できTIMESTAMP
ますか?
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;
私のユース ケースは似ていますが、ログ クリーンアップ イベントを毎晩午前 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
これを試して
CREATE EVENT event1
ON SCHEDULE EVERY '1' DAY
STARTS '2012-04-17 13:00:00' -- should be in the future
DO
-- your statements
END