13.1.2 Заявление ALTER EVENT
ALTER
[DEFINER = user]
EVENT event_name
[ON SCHEDULE schedule]
[ON COMPLETION [NOT] PRESERVE]
[RENAME TO new_event_name]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'string']
[DO event_body]
Заявление ALTER EVENT изменяет одну или несколько характеристик существующего события без необходимости его удаления и повторного создания. Синтаксис для каждой из DEFINER, ON SCHEDULE, ON COMPLETION, COMMENT, ENABLE / DISABLE и DO строк точно такой же, как и при использовании с CREATE EVENT. (См. Раздел 13.1.12, «Заявление CREATE EVENT».)
Любой пользователь может изменить событие, определенное на базе данных, для которой у этого пользователя есть разрешение EVENT. Когда пользователь выполняет успешное заявление ALTER
EVENT, этот пользователь становится определенным для затронутого события.
ALTER EVENT работает только с существующим событием:
mysql> ALTER EVENT no_such_event
> ON SCHEDULE
> EVERY '2:3' DAY_HOUR;
ERROR 1517 (HY000): Unknown event 'no_such_event'
В каждом из следующих примеров предполагается, что событие с именем myevent определено, как показано здесь:
CREATE EVENT myevent
ON SCHEDULE
EVERY 6 HOUR
COMMENT 'A sample comment.'
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
Следующее заявление изменяет график для myevent с выполнения один раз каждые шесть часов, начиная немедленно, на один раз каждые двенадцать часов, начиная через четыре часа с момента запуска заявления:
ALTER EVENT myevent
ON SCHEDULE
EVERY 12 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 4 HOUR;
Можно изменить несколько характеристик события в одном заявлении. Этот пример изменяет SQL-заявление, выполняемое myevent, на такое, которое удаляет все записи из mytable; он также изменяет график для события, чтобы оно выполнялось один раз, через один день после запуска данного заявления ALTER EVENT.
ALTER EVENT myevent
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
DO
TRUNCATE TABLE myschema.mytable;
Указывайте параметры в заявлении ALTER
EVENT только для тех характеристик, которые вы хотите изменить; пропущенные параметры сохраняют свои существующие значения. Это включает в себя любые значения по умолчанию для CREATE
EVENT, такие как ENABLE.
Чтобы отключить myevent, используйте следующее заявление ALTER EVENT:
ALTER EVENT myevent
DISABLE;
Строка ON SCHEDULE может использовать выражения, включающие встроенные функции MySQL и переменные пользователей, для получения любых значений timestamp или interval, которые она содержит. Вы не можете использовать хранимые процедуры или загружаемые функции в таких выражениях, и вы не можете использовать ссылки на таблицы; однако, вы можете использовать SELECT FROM DUAL. Это справедливо как для заявлений ALTER EVENT, так и для заявлений CREATE EVENT. Ссылки на хранимые процедуры, загружаемые функции и таблицы в таких случаях запрещены и завершаются ошибкой (см. Баг #22830).
Хотя заявление ALTER EVENT, содержащее другое заявление ALTER EVENT в своей строке DO, кажется успешным, при попытке сервера выполнить запланированное событие, выполнение завершается ошибкой.
Для переименования события используйте строку RENAME TO заявления ALTER
EVENT. Это заявление переименовывает событие myevent в yourevent:
ALTER EVENT myevent
RENAME TO yourevent;
Вы также можете перемещать событие в другую базу данных, используя запись ALTER EVENT ... RENAME TO ... и , как показано здесь: db_name.event_name
ALTER EVENT olddb.myevent
RENAME TO newdb.myevent;
Для выполнения предыдущего заявления, пользователь, его выполняющий, должен иметь разрешение EVENT как в базе данных olddb, так и в базе данных newdb.
Заявления RENAME EVENT не существует.
Значение DISABLE ON SLAVE используется на реплике вместо ENABLE или DISABLE, чтобы указать событие, созданное на источнике и реплицированное на реплику, но не выполняемое на реплике. Обычно DISABLE ON SLAVE устанавливается автоматически, как требуется; однако, существуют некоторые обстоятельства, при которых вам может потребоваться или захотеться изменить его вручную. См. Раздел 16.4.1.16, «Репликация вызываемых функций» для получения дополнительной информации.
© 2025 Oracle
Licensed under the GPLv2 License.