【とりがー】

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

最終更新:
💡 データの操作をきっかけに、DB側の処理を動かす

データベースで特定の操作が起きたとき、あらかじめ定義した処理を自動的に実行する仕組み。操作の種類、実行する時点、行ごとか文ごとかなどを設定し、詳細はDB製品によって異なる。

📌 このページのポイント
操作に連動して、DB側の処理を実行 PostgreSQL:同じトランザクション 注文テーブルへ INSERT ID:42 新規 AFTER INSERT トリガー 定義した関数を実行 履歴テーブルへ記録 ID:42 追加記録 成功 → コミットで両方を確定 エラー → 両方の効果をロールバック AFTERは「コミット後」という意味ではない
PostgreSQLのAFTER行トリガーで履歴を残す設計例。製品ごとの機能や発火条件は仕様を確認する。
ひよこ ひよこ
データベースのトリガーって何?
ペンギン先生 ペンギン先生
例えば行の追加や更新をきっかけに、更新日時を設定したり、別のテーブルへ履歴を記録したりする仕組みだよ。DB側に実行する処理を定義する。ここからはPostgreSQLを例に説明するね。
ひよこ ひよこ
処理はどう登録するの?
ペンギン先生 ペンギン先生
先にトリガー用の関数を作り、CREATE TRIGGERで対象や操作、実行時点などを指定するよ。どのDBでも同じ書き方や機能というわけではないので、製品ごとの仕様を確認するんだ。
ひよこ ひよこ
BEFOREとAFTERは確定の前と後?
ペンギン先生 ペンギン先生
操作との前後関係であって、AFTERをコミット後と考えるのは違うよ。PostgreSQLではトリガーも元の操作と同じトランザクションで動き、いずれかがエラーになれば両方の効果がロールバックされるんだ。
ひよこ ひよこ
10行更新したら10回動くの?
ペンギン先生 ペンギン先生
行トリガーなら対象の各行について動くよ。文トリガーなら対象のSQL文につき1回で、変更行が0件でも動く。条件を設定できる場合もあるので、何を1回と数えるかを決めて設計するんだ。
ひよこ ひよこ
どんなことに気を付ければいい?
ペンギン先生 ペンギン先生
アプリのSQLから見えにくい処理も増えるので、どの操作で何が動くかを記録しよう。トリガー内の更新が別のトリガーを呼ぶこともある。PostgreSQLでは無限の再帰を避ける責任は作成者にあるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「DBトリガー」って出てきたら「データベースの操作をきっかけに自動で動く処理」と思えばだいたいOK!
📖 おまけ:英語の意味
「Database Trigger」 = データベースの引き金
💬 triggerは「引き金」や「きっかけ」。ここでは、設定したDB操作をきっかけに処理が起動することを表しているよ。

参考資料

← 用語集にもどる