今回は新人エンジニアのみなさんに向けて、「MySQLで10分ごとに自動でテーブルを更新する方法」を丁寧に解説します!
「夜間にデータを自動更新したい」
「定期的に割引価格を計算したい」
…そんなときに活躍するのが、CREATE EVENT
文です。
そもそもCREATE EVENTって何?
CREATE EVENTとは、MySQLで指定した時間にSQLを自動実行できる機能です。
イメージとしては、「MySQLの中にタイマー付きのタスクスケジューラがある」と考えるとわかりやすいですね。
Windowsでいう「タスクスケジューラ」や、Linuxの「cron」に近いイメージです。
どんなことに使える?
- 一定間隔で在庫や価格を更新
- 毎晩0時に古いデータを削除
- 1時間ごとにログをアーカイブ
つまり、バッチ処理の自動化が可能になります!
実例:10分ごとに価格を自動で1.1倍に更新する
では、実際のコードを使って解説していきます。
ステップ①:テーブルの作成
まずは対象となるテーブルを作りましょう。
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
price DECIMAL(10, 2)
);
このテーブルは、商品ID、商品名、価格の3つを持つシンプルな構造です。
ステップ②:イベントの作成
次に、10分おきに価格を自動更新するイベントを作ります。
CREATE EVENT update_product_price
ON SCHEDULE EVERY 10 MINUTE
DO
UPDATE products
SET price = price * 1.1;
ここがポイント!
構文 | 意味 |
---|---|
CREATE EVENT イベント名 | イベントの作成 |
ON SCHEDULE EVERY 10 MINUTE | 10分ごとに実行 |
DO 以下 | 実行したいSQL文(ここでは価格を1.1倍) |
ステップ③:イベントスケジューラの有効化
MySQLでは、イベントスケジューラはデフォルトで無効です。
以下のSQLを実行して有効にしましょう。
SET GLOBAL event_scheduler = ON;
※これを忘れると、せっかく作ったイベントが動きません!
注意点と落とし穴
1. イベントは無効だと実行されない
再起動すると event_scheduler
がまた「OFF」になることもあるので、永続化したい場合はmy.cnf
に以下を追記してください。
event_scheduler=ON
2. 権限が必要
イベントを作成するには、EVENT
権限が必要です。
GRANT EVENT ON database_name.* TO 'username'@'localhost';
開発環境では気づかないけど、本番で怒られることがあるので要注意!
3. タイムゾーンに注意
MySQLのスケジュールは、サーバーのタイムゾーン設定に従います。
思った時間に動かない…と感じたら SELECT @@global.time_zone;
で確認してみてください。
ちょっと応用:開始時間を指定する
CREATE EVENT update_product_price
ON SCHEDULE EVERY 10 MINUTE
STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO
UPDATE products SET price = price * 1.1;
このようにすると、「今から1分後に開始して、10分ごとに実行」されます。
細かいタイミング調整も可能ですね!
まとめ
やること | 内容 |
---|---|
CREATE EVENT を使う | 定期的な処理を定義できる |
ON SCHEDULE EVERY で間隔を設定 | 例:10分ごと |
SET GLOBAL event_scheduler = ON を忘れずに | スケジューラを有効にする |
実行SQLは DO の後に書く | 実際に実行される処理 |
今後の学習の指針
- 毎日/毎週のスケジュール(
EVERY 1 DAY
,EVERY 1 WEEK
)も試してみよう! DROP EVENT
やALTER EVENT
を使ってイベントの管理を学ぼう- イベントログやエラーの確認方法を知っておくと実践に強くなる
- 複数テーブルを対象にした複雑なスケジュール処理にもチャレンジ!
CREATE EVENTは、MySQLだけで完結できるバッチ処理の強力な武器です。
うまく使いこなして、ラクで安全な自動処理を目指しましょう!