【とりがー】

トリガー(データベース) とは?

💡 テーブル操作をきっかけに「自動で動く」データベースの仕掛け
📌 このページのポイント
トリガー — DB操作に連動して自動実行 テーブル操作 INSERT(追加) UPDATE(更新) DELETE(削除) 発火! トリガー BEFORE / AFTER 条件に合致で実行 自動実行 自動処理 ログを記録 別テーブルを更新 バリデーション 例: 注文テーブルにINSERT 注文追加 トリガー発火 在庫数を自動で-1 → アプリ側でコードを書かなくてもDB側で自動処理される
DBトリガーの自動実行イメージ
ひよこ ひよこ

トリガーってどういうときに使うの?

ペンギン先生 ペンギン先生

代表的なのは監査ログ。「誰がいつどのデータを変更したか」を自動で記録するトリガーを仕込めば、アプリケーション側でログ処理を書き忘れても確実に記録が残る。あとは「注文が入ったら在庫テーブルを自動で減らす」みたいな連動処理にも使える。

ひよこ ひよこ

BEFOREとAFTERの違いは?

ペンギン先生 ペンギン先生

BEFOREトリガーはデータが変更される前に実行される。値のバリデーションや自動補正に使う(例:メールアドレスを小文字に変換してから保存)。AFTERトリガーは変更が確定した後に実行される。ログ記録や他テーブルへの反映に使うよ。

ひよこ ひよこ

アプリケーション側で同じ処理を書くのと何が違うの?

ペンギン先生 ペンギン先生

トリガーはDBレベルで動くから、SQLを直接実行する管理ツールやバッチ処理からも確実に発火する。アプリのコードを通らない操作でも漏れがない。ただしその分、アプリケーションのコードを読んでも何が起きるかわからないという透明性の問題がある。

ひよこ ひよこ

トリガーの注意点って何?

ペンギン先生 ペンギン先生

一番怖いのは「トリガーの連鎖」。トリガーAの処理がテーブルBを更新→テーブルBのトリガーBが発火→トリガーBがテーブルCを更新...と連鎖すると、何が起きているのか追跡が困難になる。バグが出ても原因を特定しにくいし、パフォーマンスも読めなくなる。さらにトリガー内でエラーが起きると元の操作ごとロールバックされるから、「INSERTしたはずなのに入っていない」という不可解な事象が起きて調査に時間がかかる。便利だけど使いすぎると「隠れた処理」が増えて保守が地獄になるんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
トリガーって出てきたら「INSERT/UPDATE/DELETEのタイミングで自動実行されるDBの仕掛け」と思えばだいたいOK!
📖 おまけ:英語の意味
「Trigger」 = 引き金・きっかけ
💬 銃の「引き金(トリガー)」と同じ。テーブル操作を引き金にして処理が発火するイメージ
← 用語集にもどる