语法
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]
1
2
3
4
5
6
7
8
9
ALTER
[DEFINER=user]
EVENTevent_name
[ONSCHEDULEschedule]
[ONCOMPLETION[NOT]PRESERVE]
[RENAMETOnew_event_name]
[ENABLE|DISABLE|DISABLEONSLAVE]
[COMMENT'string']
[DOevent_body]
ALTER EVENT语句可更改现有事件的一个或多个特征,而无需删除并重新创建它。 DEFINER,ON SCHEDULE,ON COMPLETION,COMMENT,ENABLE / DISABLE和DO子句的语法与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'
1
2
3
4
mysql>ALTEREVENTno_such_event
>ONSCHEDULE
>EVERY'2:3'DAY_HOUR;
ERROR1517(HY000):Unknownevent'no_such_event'
在以下每个示例中,假定定义了名为myevent的事件,如下所示:
CREATE EVENT myevent
ON SCHEDULE
EVERY 6 HOUR
COMMENT 'A sample comment.'
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
1
2
3
4
5
6
CREATEEVENTmyevent
ONSCHEDULE
EVERY6HOUR
COMMENT'A sample comment.'
DO
UPDATEmyschema.mytableSETmycol=mycol+1;
以下语句将myevent的计划从立即开始的每六个小时更改为立即运行的四个小时,开始每十二小时更改一次:
ALTER EVENT myevent
ON SCHEDULE
EVERY 12 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 4 HOUR;
1
2
3
4
ALTEREVENTmyevent
ONSCHEDULE
EVERY12HOUR
STARTSCURRENT_TIMESTAMP+INTERVAL4HOUR;
可以在单个语句中更改事件的多个特征。 本示例将myevent执行的SQL语句更改为从mytable删除所有记录的语句; 它还会更改事件的计划,以便在运行此ALTER EVENT语句后的一天执行一次。
ALTER EVENT myevent
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
DO
TRUNCATE TABLE myschema.mytable;
1
2
3
4
5
ALTEREVENTmyevent
ONSCHEDULE
ATCURRENT_TIMESTAMP+INTERVAL1DAY
DO
TRUNCATETABLEmyschema.mytable;
仅对要更改的特征在ALTER EVENT语句中指定选项; 省略的选项保留其现有值。 这包括CREATE EVENT的任何默认值,例如ENABLE。
要禁用myevent,请使用以下ALTER EVENT语句:
ALTER EVENT myevent
DISABLE;
1
2
ALTEREVENTmyevent
DISABLE;
ON SCHEDULE子句可以使用涉及内置MySQL函数和用户变量的表达式来获取其包含的任何时间戳或间隔值。 您不能在此类表达式中使用存储的例程或用户定义的函数,也不能使用任何表引用。 但是,您可以使用SELECT FROM DUAL。 对于ALTER EVENT和CREATE EVENT语句都是如此。 在这种情况下,明确不允许引用存储的例程,用户定义的函数和表,并且它们会因错误而失败(请参见Bug#22830)。
尽管在其DO子句中包含另一个ALTER EVENT语句的ALTER EVENT语句似乎成功,但是当服务器尝试执行生成的计划事件时,执行失败并显示错误。
要重命名事件,请使用ALTER EVENT语句的RENAME TO子句。 该语句将事件myevent重命名为yourevent:
ALTER EVENT myevent
RENAME TO yourevent;
1
2
ALTEREVENTmyevent
RENAMETOyourevent;
您还可以使用ALTER EVENT … RENAME TO …和db_name.event_name表示法将事件移动到其他数据库,如下所示:
ALTER EVENT olddb.myevent
RENAME TO newdb.myevent;
1
2
ALTEREVENTolddb.myevent
RENAMETOnewdb.myevent;
要执行上一条语句,执行它的用户必须在olddb和newdb数据库上都具有EVENT特权。
注意:没有RENAME EVENT语句。
在复制从属服务器上使用值DISABLE ON SLAVE而不是ENABLE或DISABLE来指示在主服务器上创建并复制到从属服务器但未在从属服务器上执行的事件。 通常,DISABLE ON SLAVE会根据需要自动设置。 但是,在某些情况下,您可能需要或需要手动更改它。
浏览量:
86
0