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
语句可以更改现有事件的一个或多个特征,而无需删除并重新创建它。对于每个的语法DEFINER
,ON SCHEDULE
,ON COMPLETION
,COMMENT
,ENABLE
/DISABLE
,和DO
条款是完全一样的当用于如CREATE EVENT
。(请参见“ 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 myeventON SCHEDULE EVERY 6HOUR COMMENT 'A sample comment.'DO UPDATE myschema.mytableSET mycol = mycol + 1;
以下语句将计划myevent
从立即运行开始的每六个小时一次更改为立即运行的四个小时,开始每十二小时更改一次:
ALTER EVENT myeventON SCHEDULE EVERY 12HOUR STARTS CURRENT_TIMESTAMP +INTERVAL 4HOUR ;
可以在单个语句中更改事件的多个特征。本示例将执行的SQL语句更改为myevent
从其中删除所有记录的语句mytable
。它还会更改事件的计划,以使其在ALTER EVENT
运行该语句后的一天执行一次。
ALTER EVENT myeventON SCHEDULE AT CURRENT_TIMESTAMP +INTERVAL 1 DAYDO TRUNCATE TABLE myschema.mytable;
ALTER EVENT
仅在语句中为要更改的特征指定选项。省略的选项保留其现有值。这包括任何默认值CREATE EVENT
,例如ENABLE
。
要禁用myevent
,请使用以下ALTER EVENT
语句:
ALTER EVENT myeventDISABLE ;
该ON SCHEDULE
子句可以使用涉及内置MySQL函数和用户变量的表达式来获取其包含的timestamp
或interval
值。您不能在此类表达式中使用存储的例程或用户定义的函数,也不能使用任何表引用。但是,您可以使用SELECT FROM DUAL
。对于ALTER EVENT
和CREATE EVENT
语句都是如此。在这种情况下,明确不允许引用存储的例程,用户定义的函数和表,并且它们会因错误而失败(请参见Bug#22830)。
尽管在其子句ALTER EVENT
中包含另一个ALTER EVENT
语句的DO
语句似乎成功,但是当服务器尝试执行生成的计划事件时,执行失败并显示错误。
要重命名事件,请使用ALTER EVENT
语句的RENAME TO
子句。该语句将事件重命名myevent
为yourevent
:
ALTER EVENT myeventRENAME TO yourevent;
您还可以使用ALTER EVENT ... RENAME TO ...
和db_name.event_name
标记将事件移动到其他数据库,如下所示:
ALTER EVENT olddb.myeventRENAME TO newdb.myevent;
要执行前一条语句,执行该语句的用户必须EVENT
同时具有olddb
和newdb
数据库的特权。
注意没有
RENAME EVENT
声明。
DISABLE ON SLAVE
在复制从属服务器上使用该值代替ENABLE
或DISABLE
指示在主服务器上创建并复制到从属服务器但未在从属服务器上执行的事件。通常,DISABLE ON SLAVE
根据需要自动设置;但是,在某些情况下,您可能需要或需要手动更改它。有关更多信息,请参见“复制功能”。