27.4.1 Обзор планировщика событий
События MySQL — это задачи, которые выполняются по расписанию. Поэтому мы иногда называем их планируемыми событиями. При создании события вы создаете именованный объект базы данных, содержащий одну или несколько SQL-команд, которые будут выполняться через один или несколько регулярных интервалов, начиная и заканчивая в определенную дату и время. По концепции это аналогично концепции Unix crontab (также известной как “задача cron”) или планировщика задач Windows.
Планируемые задачи такого типа также иногда известны как “временные триггеры”, что подразумевает, что это объекты, которые срабатывают по прошествии определенного времени. Хотя это в целом верно, мы предпочитаем использовать термин события, чтобы избежать путаницы с триггерами того типа, о которых рассказывается в разделе 27.3, «Использование триггеров». События также не следует путать с “временными триггерами”. В то время как триггер — это объект базы данных, чьи команды выполняются в ответ на определенный тип события, происходящего в заданной таблице, событие (планируемое) — это объект, чьи команды выполняются в ответ на прохождение заданного временного интервала.
Хотя в SQL-стандарте нет механизма планирования событий, существуют прецеденты в других системах баз данных, и вы можете заметить некоторое сходство между этими реализациями и реализацией в MySQL Server.
События MySQL обладают следующими основными функциями и свойствами:
В MySQL событие однозначно идентифицируется своим именем и схемой, к которой оно присвоено.
-
Событие выполняет определенное действие по расписанию. Это действие состоит из SQL-команды, которая может быть составной командой в блоке
BEGIN ... END, если это необходимо (см. раздел 15.6, «Синтаксис составных команд»). Время срабатывания события может быть однократным или повторным. Однократное событие выполняется только один раз. Повторное событие повторяет свое действие с регулярным интервалом, а расписание для повторяющегося события может быть присвоено конкретная начальная дата и время, конечная дата и время, обе или ни одной. (По умолчанию расписание повторяющегося события начинается сразу после его создания и продолжается неопределенно, пока оно не будет отключено или удалено.)Если повторяющееся событие не завершается в течение своего интервала планирования, результатом может быть выполнение нескольких экземпляров события одновременно. Если это нежелательно, вы должны установить механизм для предотвращения одновременного выполнения экземпляров. Например, вы можете использовать функцию
GET_LOCK(), или блокировку строк или таблиц. Пользователи могут создавать, изменять и удалять запланированные события с помощью SQL-команд, предназначенных для этих целей. Синтаксически неправильные команды создания и изменения событий завершаются соответствующим сообщением об ошибке. Пользователь может включать в действие события команды, которые требуют привилегий, которых у пользователя нет на самом деле. Команда создания или изменения события завершается успешно, но действие события завершается с ошибкой. Подробности см. в разделе 27.4.6, «Планировщик событий и привилегии MySQL».
-
Многие свойства события можно установить или изменить с помощью SQL-команд. Эти свойства включают имя события, время срабатывания, сохранение (то есть сохраняется ли оно после истечения графика), состояние (включено или выключено), действие, которое должно быть выполнено, и схему, к которой оно присвоено. См. раздел 15.1.3, «Команда ALTER EVENT».
По умолчанию определяющим пользователем события является пользователь, который создал событие, если событие не было изменено, в этом случае определяющим пользователем является пользователь, который выдал последнюю
ALTER EVENTкоманду, относящуюся к этому событию. Любой пользователь, имеющий привилегиюEVENTна базе данных, для которой определено событие, может изменить событие. См. раздел 27.4.6, «Планировщик событий и привилегии MySQL». Команда действия события может включать большинство SQL-команд, разрешенных в хранимых процедурах. Ограничения см. в разделе 27.8, «Ограничения на хранимые программы».
© 2025 Oracle
Licensed under the GPLv2 License.