Spec-Zone.ru › MariaDB

СОЗДАНИЕ СОБЫТИЯ

Синтаксис

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 |
+-------+------+--------------------------------+

См. также

  • Ограничения событий
  • Имена идентификаторов
  • Обзор событий
  • SHOW CREATE EVENT
  • ALTER EVENT
  • DROP EVENT
Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом контенте, не обязательно отражают точки зрения MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API