Документация по 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;
Это может быть слишком поздно для вашей работы, но вот как я это сделал. Я хочу, чтобы что-то запускалось каждый день в 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
Мой вариант использования аналогичен, за исключением того, что я хочу, чтобы событие очистки журнала запускалось в 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
CURRENT_DATE()
вместо str_to_date( date_format(now(), '%Y%m%d 0200'), '%Y%m%d %H%i' )
? Так или иначе спасибо.
– Linus
14.05.2020, 17:28
(CURRENT_DATE() + INTERVAL X HOUR) + INTERVAL 1 DAY
, но как Вы сказали, с Oracle это не могло бы работать то же. Спасибо за информацию.
– Linus
14.05.2020, 17:29
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());