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语句更改了现有事件的一个或多个 Feature,而无需删除并重新创建它。 DEFINERON SCHEDULEON COMPLETIONCOMMENTENABLE/DISABLEDO子句的语法与用于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;

可以在单个语句中更改事件的多个 Feature。本示例将myevent执行的 SQL 语句更改为从mytable删除所有记录的语句;它还会更改事件的计划,以便在运行此ALTER EVENT语句后的一天执行一次。

ALTER EVENT myevent
    ON SCHEDULE
      AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
    DO
      TRUNCATE TABLE myschema.mytable;

仅在ALTER EVENT语句中为要更改的 Feature 指定选项;省略的选项保留其现有值。这包括CREATE EVENT的任何默认值,例如ENABLE

要禁用myevent,请使用以下ALTER EVENT语句:

ALTER EVENT myevent
    DISABLE;

ON SCHEDULE子句可以使用涉及内置 MySQL 函数和用户变量的 table 达式来获取其中包含的* timestamp interval *值中的任何一个。您不能在此类 table 达式中使用存储的例程或用户定义的函数,也不能使用任何 table 引用。但是,您可以使用SELECT FROM DUALALTER EVENTCREATE EVENT语句均是如此。在这种情况下,特别不允许引用存储的例程,用户定义的函数和 table,并且它们会因错误而失败(请参见 Bug#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_nametable 示法将事件移动到其他数据库,如下所示:

ALTER EVENT olddb.myevent
    RENAME TO newdb.myevent;

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

Note

没有RENAME EVENT语句。

在复制从属服务器上而不是ENABLEDISABLE上使用值DISABLE ON SLAVE来指示在主服务器上创建并复制到从属服务器但未在从属服务器上执行的事件。正常情况下,会根据需要自动设置DISABLE ON SLAVE。但是,在某些情况下,您可能需要或需要手动更改它。有关更多信息,请参见第 16.4.1.16 节,“调用功能的复制”