MySQL 8.0 リファレンスマニュアル


13.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 SLAVE]
    [COMMENT 'string']
    [DO event_body]

ALTER EVENT ステートメントは、既存のイベントの 1 つ以上の特性を、そのイベントを削除して再作成することなく変更します。 DEFINERON SCHEDULEON COMPLETIONCOMMENTENABLE/DISABLEDO の各句の構文は、CREATE EVENT で使用される場合とまったく同じです。 (セクション13.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 のスケジュールを、ただちに開始して 6 時間ごとに 1 回から、ステートメントが実行された 4 時間後から開始して 12 時間ごとに 1 回に変更します。

ALTER EVENT myevent
    ON SCHEDULE
      EVERY 12 HOUR
    STARTS CURRENT_TIMESTAMP + INTERVAL 4 HOUR;

イベントの複数の特性を 1 つのステートメントで変更できます。 この例では、myevent によって実行される SQL ステートメントを、mytable のすべてのレコードを削除する SQL ステートメントに変更します。また、イベントのスケジュールも、この ALTER EVENT ステートメントが実行された 1 日あとに 1 回実行されるように変更します。

ALTER EVENT myevent
    ON SCHEDULE
      AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
    DO
      TRUNCATE TABLE myschema.mytable;

ALTER EVENT ステートメントでは、変更したい特性のオプションのみを指定します。省略されたオプションでは、その既存の値が保持されます。 これには、ENABLE などの、CREATE EVENT のデフォルト値もすべて含まれます。

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 SLAVE は、ENABLE または DISABLE のかわりにレプリカで使用され、レプリケーションソースサーバーで作成されレプリカにレプリケートされたがレプリカでは実行されなかったイベントを示します。 通常、DISABLE ON SLAVE は必要に応じて自動的に設定されます。ただし、手動で変更することが必要になる場合もあります。 詳細は、セクション17.5.1.16「呼び出される機能のレプリケーション」を参照してください。


関連キーワード:  ステートメント, CREATE, EVENT, TABLE, DROP, SLAVE, イベント, myevent, 関数, 定義