MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

既存のMySQLイベントを変更するには?ALTER EVENTステートメントの使い方

MySQLで作成済みのイベントの設定を後から変更したい場合、ALTER EVENTステートメントを使用します。このステートメントを使うことで、スケジュールや実行内容、有効・無効の状態など、イベントのさまざまな属性を柔軟に変更できます。

ALTER EVENTの基本構文

ALTER EVENTステートメントは以下のような構文で記述します。

ALTER EVENT event_name
ON SCHEDULE schedule
ON COMPLETION [NOT] PRESERVE
RENAME TO new_event_name
ENABLE | DISABLE
DO event_body

この構文では、イベント名を指定した上で、スケジュールの変更(ON SCHEDULE)、完了後の扱い(ON COMPLETION)、イベント名の変更(RENAME TO)、有効化・無効化(ENABLE | DISABLE)、実行内容の変更(DO)などを行えます。すべての句を指定する必要はなく、変更したい部分だけを記述すればOKです。

実際の使用例

ここでは、具体的な例を使ってALTER EVENTの動きを確認してみましょう。

元となるイベントの作成

まず、「hello」という名前で1分ごとに実行されるイベントを作成します。このイベントは、event_messagesテーブルにメッセージと現在日時を挿入するものです。

mysql> CREATE EVENT hello ON SCHEDULE EVERY 1 MINUTE
    -> DO INSERT INTO event_messages(message, generated_at)
    -> VALUES ('Alter event testing', NOW());
Query OK, 0 rows affected (0.00 sec)

しばらく待ってからテーブルの中身を確認すると、イベントが1分ごとに実行されていることがわかります。

mysql> SELECT * FROM event_messages;
+----+---------------------+---------------------+
| ID | MESSAGE             | Generated_at        |
+----+---------------------+---------------------+
|  1 | Without Preserve    | 2017-11-22 20:32:13 |
|  2 | With Preserve       | 2017-11-22 20:35:12 |
|  3 | Alter event testing | 2017-11-22 21:08:37 |
+----+---------------------+---------------------+
3 rows in set (0.00 sec)

スケジュールの間隔を変更する

次に、ALTER EVENTを使って実行間隔を1分から2分へ変更します。

mysql> ALTER EVENT hello ON SCHEDULE EVERY 2 MINUTE;
Query OK, 0 rows affected (0.00 sec)

このクエリにより、イベント「hello」の実行スケジュールが1分間隔から2分間隔に更新されました。

イベントの実行内容を変更する

続けて、DO句を使ってイベントの本体(実行される処理)も変更してみます。

mysql> ALTER EVENT hello
    -> DO INSERT INTO event_messages(message, generated_at)
    -> VALUES ('ALTERED', NOW());
Query OK, 0 rows affected (0.00 sec)

これで、イベントが実行されるたびに挿入されるメッセージが「Alter event testing」から「ALTERED」に変わります。

変更結果の確認

再度テーブルを確認してみましょう。

mysql> SELECT * FROM event_messages;
+----+---------------------+---------------------+
| ID | MESSAGE             | Generated_at        |
+----+---------------------+---------------------+
|  1 | Without Preserve    | 2017-11-22 20:32:13 |
|  2 | With Preserve       | 2017-11-22 20:35:12 |
|  3 | Alter event testing | 2017-11-22 21:08:37 |
|  4 | Alter event testing | 2017-11-22 21:09:15 |
|  5 | ALTERED             | 2017-11-22 21:11:15 |
+----+---------------------+---------------------+
5 rows in set (0.00 sec)

この結果セットを見ると、ID 5のレコードとして新しいメッセージ「ALTERED」が記録されています。前回の実行(ID 4)から約2分後に実行されていることから、スケジュールの変更と実行内容の変更の両方が正しく反映されたことが確認できます。

まとめ

ALTER EVENTステートメントを使えば、既存のMySQLイベントに対して以下のような変更が可能です。

  • ON SCHEDULE:実行間隔や実行タイミングの変更
  • ON COMPLETION [NOT] PRESERVE:完了後のイベントの保持設定の変更
  • RENAME TO:イベント名の変更
  • ENABLE / DISABLE:イベントの有効化・無効化
  • DO:イベントが実行する処理内容の変更

一度作成したイベントでも、運用状況に合わせてALTER EVENTで柔軟に調整できるため、定期的なバッチ処理やメンテナンス作業の自動化にとても便利です。

  1. MySQLで既存カラムのデータ型を変更する方法|ALTER TABLE~MODIFYの使い方

    既存のカラムのデータ型を変更するには? MySQLでは、ALTER TABLE文とMODIFY句を組み合わせることで、すでに存在するカラム(列)のデータ型を後から変更できます。この記事では、サンプルテーブルを作成し、実際にデータ型を変更する手順を順番に解説します。 手順1:サンプルテーブルを作成する まず、以下のSQLを実行してテーブルを作成します。 mysql> create table DemoTable ( ClientId varchar(100), ClientName varchar(100), ClientAge int, Clie

  2. Java 9で既存のモジュールを変更する方法!コマンドラインオプションの使い方を解説

    Java 9のモジュールシステムとはモジュール(module)とは、名前を持つ自己記述型のコードとデータの集合体です。コードは、Javaクラスやインターフェースなどの型を含むパッケージ群として整理され、データにはリソースやその他の静的な情報が含まれます。モジュールを使用するには、まずモジュールを宣言し、ソースコードのルートにmodule-info.javaファイルを配置する必要があります。以下は「module-info.java」ファイルの基本テンプレートです。module <module-name> { requires <module-name1>;