MySQLで開始時刻と終了時刻を指定した定期イベントを作成する方法
MySQLの定期イベントとは
MySQLにおける「定期イベント(Recurring Event)」とは、一定の間隔で繰り返し実行され、あらかじめ指定された時刻に自動的に終了するイベントのことです。バックアップ処理やログの定期的な記録など、繰り返し必要となるタスクをデータベース側で自動化したい場合に非常に便利な機能です。
この記事では、「毎分実行され、1時間後に終了する」という条件を持つ定期イベントの作成方法を、具体的な例とともに解説します。
定期イベントを作成するSQL文
以下の例では、CREATE EVENT ステートメントを使用して、次のようなイベントを作成しています。
- 実行間隔: 1分ごと
- 開始時刻: 現在の時刻(CURRENT_TIMESTAMP)
- 終了時刻: 開始から1時間後
- 実行内容: event_message テーブルにメッセージと現在日時を挿入する
mysql> CREATE EVENT testing_event10
-> ON SCHEDULE EVERY 1 MINUTE
-> STARTS CURRENT_TIMESTAMP
-> ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
-> DO INSERT INTO event_message(message, generated_at)
-> VALUES('Recurring events', NOW());
Query OK, 0 rows affected (0.00 sec)構文のポイント
定期イベントを作成する際の構文は、以下の要素で構成されています。
ON SCHEDULE EVERY 1 MINUTE:イベントを1分ごとに繰り返し実行することを指定します。STARTS CURRENT_TIMESTAMP:イベントの開始時刻を現在の日時に設定します。ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR:開始から1時間後にイベントを終了させることを指定します。DO以降に、繰り返し実行したいSQL文を記述します。
イベントの実行結果を確認する
イベントが正しく動作しているか、event_message テーブルの中身を確認してみましょう。
mysql> SELECT * FROM event_message;
+----+------------------+---------------------+
| ID | MESSAGE | Generated_at |
+----+------------------+---------------------+
| 1 | Hello | 2017-11-22 17:05:22 |
| 2 | Hi | 2017-11-22 17:08:37 |
| 3 | Recurring events | 2017-11-22 20:14:00 |
| 4 | Recurring events | 2017-11-22 20:15:00 |
| 5 | Recurring events | 2017-11-22 20:16:00 |
| 6 | Recurring events | 2017-11-22 20:17:00 |
| 7 | Recurring events | 2017-11-22 20:18:00 |
| 8 | Recurring events | 2017-11-22 20:19:00 |
+----+------------------+---------------------+
8 rows in set (0.00 sec)結果を見ると、ID 3以降のレコードがちょうど1分間隔で登録されていることがわかります。これは、作成したイベントが指定どおり毎分実行されていることを示しています。そして、開始から1時間が経過すると、イベントは自動的に終了し、それ以上レコードは追加されません。
注意点
- イベントスケジューラを利用するには、MySQLサーバーで
event_schedulerが有効になっている必要があります。SHOW VARIABLES LIKE 'event_scheduler';で確認できます。 - 作成済みのイベントを削除したい場合は、
DROP EVENT イベント名;を実行します。 - イベントの一覧は
SHOW EVENTS;コマンドで確認できます。
まとめ
STARTS 句と ENDS 句を組み合わせることで、MySQLでは「指定した時刻に開始し、指定した時刻に終了する」定期イベントを簡単に作成できます。繰り返し処理をアプリケーション側ではなくデータベース側で完結させたい場合に、ぜひ活用してみてください。
-
MySQLでクローンテーブルを作成する方法【手順とSQL例を解説】
データベースの運用では、既存のテーブルとまったく同じ構造を持つ複製(クローン)が必要になる場面があります。しかし、CREATE TABLE ... SELECT文を使う方法では、インデックスやデフォルト値などの属性が引き継がれないため、目的を満たせないことがあります。そこで本記事では、インデックスやデフォルト値まで完全に一致したクローンテーブルを作成するための手順を、具体的なSQL例とともにわかりやすく解説します。クローンテーブル作成の基本手順MySQLで完全なクローンテーブルを作成するには、以下の3ステップを実行します。SHOW CREATE TABLE文を使って、元テーブルの構造・インデッ
-
MySQLでシーケンス(連番)を作成・使用する方法をわかりやすく解説
MySQLにはOracleやPostgreSQLのような独立したシーケンスオブジェクトは存在しませんが、カラムにAUTO_INCREMENT属性を設定することで、同じ機能を簡単に実現できます。レコードを挿入するたびに、初期値1から始まり、1ずつ自動的に増加する連番が割り当てられます。 1. シーケンス用テーブルの作成 まず、CREATE TABLE文を使って、AUTO_INCREMENT属性を持つカラムを含むテーブルを作成します。主キーとして設定するのが一般的です。 mysql> CREATE table SequenceDemo -> ( -> SequenceId in