これが私のクエリです
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;
これは、各イベントをそのメタデータとともに一覧表示します(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;
これはあなたの仕事には遅すぎるかもしれませんが、ここに私がそれをした方法があります。毎日午前1時に何かを実行したい-これはあなたがやっていることと似ていると思う。ここに私がそれをした方法があります:
CREATE EVENT event_name
ON SCHEDULE
EVERY 1 DAY
STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR)
DO
# Your awesome query
私のユースケースは似ていますが、ログクリーンアップイベントを毎晩午前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
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;
これを試して
CREATE EVENT event1
ON SCHEDULE EVERY '1' DAY
STARTS '2012-04-17 13:00:00' -- should be in the future
DO
-- your statements
END
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());