今回は新人エンジニアのみなさんに向けて、「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 MINUTE10分ごとに実行
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 EVENTALTER EVENT を使ってイベントの管理を学ぼう
  • イベントログやエラーの確認方法を知っておくと実践に強くなる
  • 複数テーブルを対象にした複雑なスケジュール処理にもチャレンジ!

CREATE EVENTは、MySQLだけで完結できるバッチ処理の強力な武器です。
うまく使いこなして、ラクで安全な自動処理を目指しましょう!

最後までお読みいただきありがとうございます。