Spec-Zone .ru
спецификации, руководства, описания, API

13.1.11. CREATE EVENT Синтаксис

CREATE    [DEFINER = { user | CURRENT_USER }]    EVENT    [IF NOT EXISTS]    event_name    ON SCHEDULE schedule    [ON COMPLETION [NOT] PRESERVE]    [ENABLE | DISABLE | DISABLE ON SLAVE]    [COMMENT 'comment']    DO event_body;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}

Этот оператор создает и планирует новое событие. Событие не будет работать, если Планировщик События не будет включен. Для получения информации о проверке состояния Планировщика События и включении этому в случае необходимости, см. Раздел 19.4.2, "Конфигурация Планировщика События".

CREATE EVENT требует EVENT полномочие для схемы, в которой должно быть создано событие. Это могло бы также потребовать SUPER полномочие, в зависимости от DEFINER значение, как описано позже в этом разделе.

Минимальные требования для допустимого CREATE EVENT оператор следующие:

Это - пример минимального CREATE EVENT оператор:

CREATE EVENT myevent    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR    DO      UPDATE myschema.mytable SET mycol = mycol + 1;

Предыдущий оператор создает названное событие myevent. Это событие выполняется однажды — один час после его создания — выполняя SQL-оператор, который постепенно увеличивает значение myschema.mytable таблица mycol столбец 1.

event_name должен быть допустимый идентификатор MySQL с максимальной длиной 64 символов. Имена события не являются чувствительными к регистру, таким образом, у Вас не может быть двух названных событий myevent и MyEvent в той же самой схеме. Вообще, управляющие имена события правил являются тем же самым как теми для имен сохраненных подпрограмм. См. Раздел 9.2, "Имена объектов Схемы".

Событие связывается со схемой. Если никакая схема не обозначается как часть event_name, значение по умолчанию (ток) схема принимается. Чтобы создать событие в определенной схеме, квалифицируйте имя события с использованием схемы schema_name.event_name синтаксис.

DEFINER пункт определяет учетную запись MySQL, которая будет использоваться, проверяя права доступа во время выполнения события. Если a user значение дается, это должна быть учетная запись MySQL, определенная как 'user_name'@'host_name' (тот же самый формат, используемый в GRANT оператор), CURRENT_USER, или CURRENT_USER(). Значение по умолчанию DEFINER значение является пользователем, который выполняется CREATE EVENT оператор. Это - то же самое как определение DEFINER = CURRENT_USER явно.

Если Вы определяете DEFINER пункт, эти правила определяют допустимое DEFINER пользовательские значения:

Для получения дополнительной информации о безопасности события, см. Раздел 19.6, "Управление доступом для Сохраненных Программ и Представления".

В пределах события, CURRENT_USER() функционируйте возвращает учетную запись, используемую, чтобы проверить полномочия во время выполнения события, которое является DEFINER пользователь. Для получения информации о пользователе, контролирующем в пределах событий, см. Раздел 6.3.12, "основанный на SQL MySQL Account Activity Auditing".

IF NOT EXISTS имеет то же самое значение для CREATE EVENT что касается CREATE TABLE: Если событие называют event_name уже существует в той же самой схеме, никакие меры не предпринимаются, и никакие ошибочные результаты. (Однако, предупреждение сгенерировано в таких случаях.)

ON SCHEDULE пункт определяет когда, как часто, и как долго event_body определенный для повторений события. Этот пункт принимает одну из двух форм:

ON SCHEDULE пункт может использовать выражения, включающие встроенные функции MySQL и пользовательские переменные, чтобы получить любой из timestamp или interval значения, которые это содержит. Вы не можете использовать сохраненные функции или определяемые пользователем функции в таких выражениях, и при этом Вы не можете использовать ссылки на таблицу; однако, можно использовать SELECT FROM DUAL. Это - истина для обоих CREATE EVENT и ALTER EVENT операторы. Ссылки на сохраненные функции, определяемые пользователем функции, и таблицы в таких случаях определенно не разрешаются, и сбой с ошибкой (см. Ошибку #22830).

Времена в ON SCHEDULE пункт интерпретируется, используя текущий сеанс time_zone значение. Это становится часовым поясом события; то есть, часовой пояс, который используется для планирования событий и является в действительности в пределах события, как это выполняется. Эти времена преобразовываются в UTC и сохранены наряду с часовым поясом события в mysql.event таблица. Это позволяет выполнению события продолжиться как определено независимо от любых последующих изменений к часовому поясу сервера или эффектам летнего времени. Для дополнительной информации о представлении времен события см. Раздел 19.4.4, "Метаданные События". См. также Раздел 13.7.5.19,"SHOW EVENTS Синтаксис", и Раздел 20.7," INFORMATION_SCHEMA EVENTS Таблица".

Обычно, как только событие истекло, оно было сразу отброшено. Можно переопределить это поведение, определяя ON COMPLETION PRESERVE. Используя ON COMPLETION NOT PRESERVE просто делает значение по умолчанию нестойким поведением явный.

Можно создать событие, но препятствовать тому, чтобы оно было активным использованием DISABLE ключевое слово. Альтернативно, можно использовать ENABLE сделать явным состояние значения по умолчанию, которое является активным. Это является самым полезным в соединении с ALTER EVENT (см. Раздел 13.1.2,"ALTER EVENT Синтаксис").

Третье значение может также появиться вместо ENABLED или DISABLED; DISABLE ON SLAVE устанавливается для состояния события на ведомом устройстве репликации указать, что событие создавалось на ведущем устройстве и тиражировалось к ведомому устройству, но не выполняется на ведомом устройстве. См. Раздел 16.4.1.11, "Репликация Вызванных Функций".

Можно предоставить комментарий для события, используя a COMMENT пункт. comment может быть любая строка до 64 символов, которые Вы хотите использовать для того, чтобы описать событие. Текст комментария, будучи строковым литералом, должен быть окружен кавычками.

DO пункт определяет действие, которое переносит событие, и состоит из SQL-оператора. Почти любой допустимый оператор MySQL, который может использоваться в сохраненной подпрограмме, может также использоваться в качестве оператора действия для запланированного события. (См. Раздел E.1, "Ограничения на Сохраненные Программы".) Например, следующее событие e_hourly удаляет все строки из sessions таблица однажды в час, где эта таблица является частью site_activity схема:

CREATE EVENT e_hourly    ON SCHEDULE      EVERY 1 HOUR    COMMENT 'Clears out sessions table each hour.'    DO      DELETE FROM site_activity.sessions;

MySQL хранит sql_mode системная переменная, устанавливающая в действительности, когда событие создается или изменяется, и всегда выполняет событие с этой установкой в силе, независимо от текущего режима SQL сервера, когда событие начинает выполняться.

A CREATE EVENT оператор, который содержит ALTER EVENT оператор в DO пункт, кажется, успешно выполняется; однако, когда сервер пытается выполнить получающееся запланированное событие, сбои выполнения с ошибкой.

Отметить

Операторы такой как SELECT или SHOW это просто возвращается, набор результатов не имеют никакого эффекта когда использующийся в событии; вывод от них не отправляется MySQL Monitor, и при этом это не сохранено нигде. Однако, можно использовать операторы такой как SELECT ... INTO и INSERT INTO ... SELECT то хранилище результат. (См. следующий пример в этом разделе для экземпляра последнего.)

Схема, которой принадлежит событие, является схемой значения по умолчанию для ссылок на таблицу в DO пункт. Любые ссылки на таблицы в других схемах должны быть квалифицированы с надлежащим именем схемы.

Как с сохраненными подпрограммами, можно использовать синтаксис составного оператора в DO пункт при использовании BEGIN и END ключевые слова, как показано здесь:

delimiter |CREATE EVENT e_daily    ON SCHEDULE      EVERY 1 DAY    COMMENT 'Saves total number of sessions then clears the table each day'    DO      BEGIN        INSERT INTO site_activity.totals (time, total)          SELECT CURRENT_TIMESTAMP, COUNT(*)            FROM site_activity.sessions;        DELETE FROM site_activity.sessions;      END |delimiter ;

Этот пример использует delimiter команда, чтобы изменить разделитель оператора. См. Раздел 19.1, "Определяя Сохраненные Программы".

Более сложные составные операторы, такие как используемые в сохраненных подпрограммах, возможны в событии. Этот пример использует локальные переменные, обработчик ошибок, и конструкцию управления потоками:

delimiter |CREATE EVENT e    ON SCHEDULE      EVERY 5 SECOND    DO      BEGIN        DECLARE v INTEGER;        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;        SET v = 0;        WHILE v < 5 DO          INSERT INTO t1 VALUES (0);          UPDATE t2 SET s1 = s1 + 1;          SET v = v + 1;        END WHILE;    END |delimiter ;

Нет никакого способа передать параметры непосредственно к или от событий; однако, возможно вызвать сохраненную подпрограмму с параметрами в пределах события:

CREATE EVENT e_call_myproc    ON SCHEDULE      AT CURRENT_TIMESTAMP + INTERVAL 1 DAY    DO CALL myproc(5, 27);

Если устройство определения события имеет SUPER полномочие, событие может считать и записать глобальные переменные. Поскольку предоставление этого полномочия влечет за собой потенциал для злоупотребления, экстремальная забота должна быть проявлена при этом.

Обычно, любые операторы, которые допустимы в сохраненных подпрограммах, могут использоваться для операторов действия, выполняемых событиями. Для получения дополнительной информации об операторах, допустимых в пределах сохраненных подпрограмм, см. Раздел 19.2.1, "Сохраненный Стандартный Синтаксис". Можно создать событие как часть сохраненной подпрограммы, но событие не может быть создано другим событием.