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 つ以上の特性を、そのイベントを削除して再作成することなく変更します。 DEFINER
、ON SCHEDULE
、ON COMPLETION
、COMMENT
、ENABLE
/DISABLE
、DO
の各句の構文は、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「呼び出される機能のレプリケーション」を参照してください。