文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  ALTER EVENT 语句

15.1.3 ALTER EVENT 语句

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 语句用于更改现有事件的一个或多个特征,而无需删除并重新创建它。 DEFINERON SCHEDULEON COMPLETIONCOMMENTENABLE / DISABLEDO 子句的语法与在 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 函数和用户变量的表达式来获取它包含的任何 timestampinterval 值。您不能在此类表达式中使用存储例程或可加载函数,也不能使用任何表引用;但是,您可以使用 SELECT FROM DUAL。这对于 ALTER EVENTCREATE 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;

要执行上一条语句,执行该语句的用户必须对 olddbnewdb 数据库都具有 EVENT 权限。

注意

没有 RENAME EVENT 语句。

DISABLE ON REPLICA 在副本上使用而不是 ENABLEDISABLE 来指示在复制源服务器上创建并复制到副本但未在副本上执行的事件。通常,DISABLE ON REPLICA 会根据需要自动设置;但是,在某些情况下,您可能希望或需要手动更改它。有关更多信息,请参阅第 19.5.1.16 节“复制调用的功能”

DISABLE ON REPLICA 替换了已弃用的 DISABLE ON SLAVE,并将在未来版本的 MySQL 中删除。