СОЗДАНИЕ СОБЫТИЯ
Синтаксис
CREATE [OR REPLACE]
[DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO sql_statement;
schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
Описание
Это оператор создаёт и планирует новое событие. Для схемы, в которой создаётся событие, требуется привилегия EVENT.
Минимальные требования к оператору CREATE EVENT:
- Ключевые слова
CREATE EVENTплюс имя события, которое однозначно идентифицирует событие в текущей схеме. (До MySQL 5.1.12 имя события должно было быть уникальным только среди событий, созданных одним пользователем в базе данных.) - Оператор
ON SCHEDULE, который определяет, когда и как часто выполняется событие. - Оператор
DO, содержащий оператор SQL, который будет выполнен событием.
Вот пример минимального оператора CREATE EVENT:
CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
Предыдущий оператор создаёт событие с именем myevent. Это событие выполнится один раз — через один час после своего создания — путём выполнения оператора SQL, который увеличивает значение столбца mycol таблицы myschema.mytable на 1.
Имя события должно быть допустимым идентификатором MariaDB с максимальной длиной 64 символа. Оно может быть ограничено с помощью обратных кавычек и может быть квалифицировано именем схемы базы данных. Событие связано как с пользователем MariaDB (определяющий), так и со схемой, а его имя должно быть уникальным среди имён событий в этой схеме. В целом правила, регулирующие имена событий, аналогичны правилам для имён хранимых процедур. См. Имена идентификаторов.
Если схема не указана как часть имени события, предполагается использовать схему по умолчанию (текущую).
Для допустимых идентификаторов, используемых в качестве имён событий, см. Имена идентификаторов.
OR REPLACE
Оператор OR REPLACE был добавлен в MariaDB 10.1.4. Если он используется и событие уже существует, вместо возврата ошибки, существующее событие будет удалено и заменено новым определённым событием.
IF NOT EXISTS
Если используется оператор IF NOT EXISTS , MariaDB вернёт предупреждение вместо ошибки, если событие уже существует. Не может использоваться совместно с OR REPLACE.
ON SCHEDULE
Оператор ON SCHEDULE может быть использован для указания времени запуска события.
AT
Если вы хотите выполнить событие только один раз (одноразовое событие), вы можете использовать ключевое слово AT, за которым следует отметка времени. Если вы используете CURRENT_TIMESTAMP, событие выполнится сразу после создания. Для удобства вы можете добавить один или несколько интервалов к этой отметке времени. Вы также можете указать отметку времени в прошлом, чтобы событие было сохранено, но не запущено, пока вы не измените его с помощью ALTER EVENT.
Следующий пример показывает, как создать событие, которое будет запущено завтра в определённое время:
CREATE EVENT example ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY + INTERVAL 3 HOUR DO something;
Вы также можете указать, что событие должно запускаться регулярно (периодическое событие). В таких случаях используйте оператор EVERY, за которым следует интервал.
Если событие повторяется, вы можете указать, когда должно произойти первое выполнение, используя оператор STARTS, и максимальное время последнего выполнения с помощью оператора ENDS. STARTS и ENDS операторы следуют за отметкой времени и, необязательно, одним или несколькими интервалами. Оператор ENDS может указать отметку времени в прошлом, чтобы событие сохранилось, но не выполнялось до тех пор, пока вы не измените его с помощью ALTER EVENT.
В следующем примере, в следующем месяце периодическое событие будет запускаться ежечасно в течение недели:
CREATE EVENT example ON SCHEDULE EVERY 1 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 1 MONTH ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH + INTERVAL 1 WEEK DO some_task;
Интервалы состоят из количества и единицы времени. Единицы времени такие же, как и для других операторов и функций времени, за исключением того, что вы не можете использовать микросекунды для событий. Для простых единиц времени, таких как HOUR или MINUTE, количество — целое число, например, '10 MINUTE'. Для составных единиц времени, таких как HOUR_MINUTE или HOUR_SECOND, количество должно быть строкой со всеми вовлечёнными простыми значениями и их разделителями, например, '2:30' или '2:30:30'.
ON COMPLETION [NOT] PRESERVE
Оператор ON COMPLETION может быть использован для указания, должно ли событие быть удалено после его последнего выполнения (то есть, после того, как его отметка времени AT или ENDS прошла). По умолчанию события удаляются, когда они истекают. Чтобы явно указать, что это желаемое поведение, можно использовать ON COMPLETION NOT PRESERVE. Вместо этого, если вы хотите сохранить событие, используйте ON COMPLETION PRESERVE.
Если вы укажете ON COMPLETION NOT PRESERVE, и вы укажете отметку времени в прошлом для AT или ENDS оператора, событие будет немедленно удалено. В таких случаях вы получите сообщение 1558: «Время выполнения события в прошлом, и ON COMPLETION NOT PRESERVE установлено. Событие было удалено сразу после создания».
ENABLE/DISABLE/DISABLE ON SLAVE
События ENABLE по умолчанию. Если вы хотите остановить выполнение события MariaDB, вы можете указать DISABLE. Когда оно готово к активации, вы можете включить его с помощью ALTER EVENT. Другой вариант — DISABLE ON SLAVE, что указывает, что событие было создано на мастер-сервере и было реплицировано на сервер-ведомый, которому запрещено выполнять событие. Если DISABLE ON SLAVE явно задано, событие будет отключено везде. Оно не будет выполняться на мастер-сервере или серверах-ведомых.
КОММЕНТАРИЙ
Оператор COMMENT может быть использован для установки комментария к событию. Максимальная длина комментария 64 символа. Комментарий — это строка, поэтому он должен быть заключён в кавычки. Чтобы просмотреть комментарии к событиям, можно запросить таблицу INFORMATION_SCHEMA.EVENTS (столбец называется EVENT_COMMENT).
Примеры
Минимальный оператор CREATE EVENT:
CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
Событие, которое будет запущено завтра в определённое время:
CREATE EVENT example ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY + INTERVAL 3 HOUR DO something;
В следующем месяце периодическое событие будет запускаться ежечасно в течение недели:
CREATE EVENT example ON SCHEDULE EVERY 1 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 1 MONTH ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH + INTERVAL 1 WEEK DO some_task;
OR REPLACE и IF NOT EXISTS:
CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
ERROR 1537 (HY000): Event 'myevent' already exists
CREATE OR REPLACE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;;
Query OK, 0 rows affected (0.00 sec)
CREATE EVENT IF NOT EXISTS myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
SHOW WARNINGS;
+-------+------+--------------------------------+
| Level | Code | Message |
+-------+------+--------------------------------+
| Note | 1537 | Event 'myevent' already exists |
+-------+------+--------------------------------+
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/create-event/