ALTER [DEFINER = {user
| CURRENT_USER }] EVENTevent_name
[ON SCHEDULEschedule
] [ON COMPLETION [NOT] PRESERVE] [RENAME TOnew_event_name
] [ENABLE | DISABLE | DISABLE ON SLAVE] [COMMENT 'comment
'] [DOsql_statement
]
ALTER EVENT
ステートメントは、既存のイベントを削除して再作成することなく、それらのイベントの
1
つ以上の特性を変更するために使用されます。
DEFINER
、ON
SCHEDULE
、ON
COMPLETION
、COMMENT
、ENABLE
/ DISABLE
、および
DO
の各節の構文は、CREATE
EVENT
で使用される場合とまったく同じです。詳細は、項8.1.11. 「CREATE EVENT
構文」
を参照してください。
DEFINER
節に対するサポートは、MySQL 5.1.17
で追加されました。
MySQL 5.1.12 からは、このステートメントには
EVENT
権限が必要です。ユーザーが正常な
ALTER EVENT
ステートメントを実行すると、そのユーザーは、影響を受けるイベントの定義者になります。
(MySQL 5.1.11
以前では、イベントは、その定義者または
SUPER
権限を持つユーザーだけが変更できました。)
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 TABLE 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
ステートメントの両方に当てはまります。MySQL
5.1.13
からは、そのような場合のストアドルーチン、ユーザー定義関数、およびテーブルへの参照は明確に禁止され、エラーで失敗します
(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
ステートメントはありません。
MySQL 5.1.18
からは、ENABLED
または
DISABLED
の代わりに 3
番目の値が表示される可能性もあります。DISABLE
ON SLAVE
は、マスター上で作成され、スレーブに複製されたイベントを示すためにレプリケーションスレーブ上で使用されますが、そのスレーブ上では実行されません。通常、DISABLE
ON SLAVE
は必要に応じて自動的に設定されます。ただし、手動で変更することが必要になる場合もあります。詳細については、Replication of Invoked Features
を参照してください。