Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  ALTER EVENT Statement

15.1.3 事件更改语句

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 take the same syntax as when used with CREATE EVENT 语句。(查看Section 15.1.13, “CREATE EVENT Statement”。)

任何用户都可以对其拥有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 语句时,1 天后执行一次。

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;

使用 MySQL 内置函数和用户变量表达式来获取 timestampinterval 值,可以在 ALTER EVENTCREATE EVENT 语句中使用。但是,不允许在这些表达式中使用存储函数、可加载函数或表引用,除非使用 SELECT FROM DUAL。这点非常重要,不能忽视(见 Bug #22830)。

ALTER EVENT 语句中包含另一个 ALTER EVENT 语句的 DO 子句中,虽然语句执行成功,但是当服务器尝试执行生成的计划事件时,执行失败。

要重命名一个事件,请使用 ALTER EVENT 语句中的 RENAME TO 子句。这个语句将重命名事件 myeventyourevent

ALTER EVENT myevent
    RENAME TO yourevent;

你也可以使用ALTER EVENT ... RENAME TO ...语句和db_name.event_name notation将事件移动到不同的数据库,例如:

ALTER EVENT olddb.myevent
    RENAME TO newdb.myevent;

执行上述语句时,用户必须在olddbnewdb两个数据库上拥有EVENT权限。

Note

没有RENAME EVENT语句。

在复制服务器上使用DISABLE ON REPLICA代替ENABLEDISABLE,表示从主服务器创建的事件,在复制服务器上未执行。通常情况下,DISABLE ON REPLICA会自动设置;然而,在某些情况下,你可能需要手动更改它。详见Section 19.5.1.16, “Replication of Invoked Features”,了解更多信息。

DISABLE ON REPLICA取代了弃用的DISABLE ON SLAVE,将在未来 MySQL 版本中删除。