今回は新人エンジニアのみなさんに向けて、「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だけで完結できるバッチ処理の強力な武器です。
うまく使いこなして、ラクで安全な自動処理を目指しましょう!