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 语句可以更改现有事件的特征,而无需删除并重新创建它。每个 DEFINER
、ON SCHEDULE
、ON COMPLETION
、COMMENT
、ENABLE
/ DISABLE
和DO
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 内置函数和用户变量表达式来获取 timestamp
或 interval
值,可以在 ALTER EVENT
和 CREATE EVENT
语句中使用。但是,不允许在这些表达式中使用存储函数、可加载函数或表引用,除非使用 SELECT FROM DUAL
。这点非常重要,不能忽视(见 Bug #22830)。
在 ALTER EVENT
语句中包含另一个 ALTER EVENT
语句的 DO
子句中,虽然语句执行成功,但是当服务器尝试执行生成的计划事件时,执行失败。
要重命名一个事件,请使用 ALTER EVENT
语句中的 RENAME TO
子句。这个语句将重命名事件 myevent
到 yourevent
:
ALTER EVENT myevent
RENAME TO yourevent;
你也可以使用ALTER EVENT ... RENAME TO ...
语句和
notation将事件移动到不同的数据库,例如: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
会自动设置;然而,在某些情况下,你可能需要手动更改它。详见Section 19.5.1.16, “Replication of Invoked Features”,了解更多信息。
DISABLE ON REPLICA
取代了弃用的DISABLE ON SLAVE
,将在未来 MySQL 版本中删除。