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
子句的語法與使用 CREATE EVENT
時完全相同。(請參閱第 15.1.13 節「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;
可以在單一陳述式中變更事件的多個特性。此範例將 myevent
執行的 SQL 陳述式變更為刪除 mytable
中所有記錄的陳述式;它也變更事件的排程,使其在執行此 ALTER EVENT
陳述式的一天後執行一次。
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;
ON SCHEDULE
子句可以使用包含內建 MySQL 函數和使用者變數的表達式,來取得其包含的任何 timestamp
或 interval
值。您不能在此類表達式中使用預存常式或可載入的函數,並且您不能使用任何資料表參考;但是,您可以使用 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;
您也可以使用 ALTER EVENT ... RENAME TO ...
和
表示法,將事件移動到不同的資料庫,如下所示: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
會在需要時自動設定;但是,在某些情況下,您可能想要或需要手動變更它。請參閱 第 19.5.1.16 節「調用功能的複寫」,以取得更多資訊。
DISABLE ON REPLICA
取代了已棄用,並且在未來版本的 MySQL 中可能會移除的 DISABLE ON SLAVE
。