文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  ALTER EVENT 陳述式

15.1.3 ALTER EVENT 陳述式

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 子句的語法,與使用 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 函數和使用者變數的運算式,來取得其中包含的任何 timestampinterval 值。您不能在此類運算式中使用預存常式或可載入的函數,也不能使用任何表格參考;但是,您可以使用 SELECT FROM DUAL。對於 ALTER EVENTCREATE EVENT 陳述式,情況皆是如此。在這種情況下,明確禁止參考預存常式、可載入的函數和表格,並且會失敗並產生錯誤(請參閱錯誤 #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;

若要執行先前的陳述式,執行該陳述式的使用者必須在 olddbnewdb 資料庫上都具有 EVENT 權限。

注意

沒有 RENAME EVENT 陳述式。

DISABLE ON REPLICA 值用於複本,而不是 ENABLEDISABLE,表示在複寫來源伺服器上建立並複寫到複本,但在複本上未執行的事件。通常,會根據需要自動設定 DISABLE ON REPLICA;但是,在某些情況下,您可能想要或需要手動變更它。有關更多資訊,請參閱 章節 19.5.1.16,「已叫用功能的複寫」

DISABLE ON REPLICA 取代已棄用的 DISABLE ON SLAVE,並且在未來的 MySQL 版本中可能會移除。