MySQL Event Scheduler на определенное время каждый день - PullRequest
29 голосов
/ 18 июня 2010

Вот мой запрос

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

Как я могу обновлять статус до «0» в 13:00 каждый день. Что я должен поставить вместо TIMESTAMP?

Ответы [ 6 ]

31 голосов
/ 19 января 2011

Документация на CREATE EVENT довольно хороша, но чтобы понять ее правильно, требуется некоторое время.

У вас есть две проблемы: во-первых, повторение события , во-вторых, его запуск в 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;

Здесь перечислены каждое событие с его метаданными, например, должно ли оно выполняться только один раз или повторяться.

Вторая проблема: указание повторяющегося события на определенный элемент расписания .

Испытывая различные виды выражения, мы можем придумать что-то вроде:

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;
29 голосов
/ 03 января 2014

Это может быть слишком поздно для вашей работы, но вот как я это сделал. Я хочу, чтобы что-то запускалось каждый день в 1:00 - я думаю, это похоже на то, что вы делаете Вот как я это сделал:

CREATE EVENT event_name
  ON SCHEDULE
    EVERY 1 DAY
    STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR)
  DO
    # Your awesome query
15 голосов
/ 31 января 2013

Мой вариант использования аналогичен, за исключением того, что я хочу, чтобы событие очистки журнала запускалось в 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 
11 голосов
/ 12 мая 2014
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;
9 голосов
/ 17 апреля 2012

Попробуйте это

CREATE EVENT event1
ON SCHEDULE EVERY '1' DAY
STARTS '2012-04-17 13:00:00' -- should be in the future
DO
-- your statements
END
1 голос
/ 25 августа 2015
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());
...