ALTER
[DEFINER = user]
EVENT event_name
[ON SCHEDULE schedule]
[ON COMPLETION [NOT] PRESERVE]
[RENAME TO new_event_name]
[ENABLE | DISABLE | DISABLE ON {REPLICA | SLAVE}]
[COMMENT 'string']
[DO event_body]
ALTER EVENT
语句用于更改现有事件的一个或多个特征,而无需删除并重新创建它。 DEFINER
、ON SCHEDULE
、ON COMPLETION
、COMMENT
、ENABLE
/ DISABLE
和 DO
子句的语法与在 CREATE EVENT
中使用时完全相同。(请参阅 第 15.1.13 节 “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;
可以在单个语句中更改事件的多个特征。此示例将 myevent
执行的 SQL 语句更改为从 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)。
尽管其 DO
子句中包含另一个 ALTER EVENT
语句的 ALTER EVENT
语句看起来已成功,但当服务器尝试执行生成的计划事件时,执行将失败并显示错误。
要重命名事件,请使用 ALTER EVENT
语句的 RENAME TO
子句。此语句将事件 myevent
重命名为 yourevent
ALTER EVENT myevent
RENAME TO yourevent;
您还可以使用 ALTER EVENT ... RENAME TO ...
和
表示法将事件移动到不同的数据库,如下所示db_name.event_name
ALTER EVENT olddb.myevent
RENAME TO newdb.myevent;
要执行上一条语句,执行该语句的用户必须对 olddb
和 newdb
数据库都具有 EVENT
权限。
没有 RENAME EVENT
语句。
值 DISABLE ON REPLICA
在副本上使用而不是 ENABLE
或 DISABLE
来指示在复制源服务器上创建并复制到副本但未在副本上执行的事件。通常,DISABLE ON REPLICA
会根据需要自动设置;但是,在某些情况下,您可能希望或需要手动更改它。有关更多信息,请参阅第 19.5.1.16 节“复制调用的功能”。
DISABLE ON REPLICA
替换了已弃用的 DISABLE ON SLAVE
,并将在未来版本的 MySQL 中删除。