CodeGym /コース /SQL SELF /トリガーとの出会い

トリガーとの出会い

SQL SELF
レベル 57, レッスン 0
使用可能

トリガー(trigger)は、データベースの中の「callback」みたいなもので、特定のイベントに反応するやつだよ。つまり、トリガーはINSERT、UPDATE、DELETEみたいな操作がテーブルで実行された時に自動で反応する仕組みなんだ。

例えば、君のところに賢いアシスタントがいて、何かするたびに自動で作業してくれると想像してみて。新しい学生のレコードを追加したら、アシスタントが自動で「最終更新日」のフィールドを更新してくれる感じ。データベースのトリガーもまさにそれと同じで、イベントを「聞いて」プログラムされたリアクションを実行するんだ。

トリガーは2つのものを組み合わせてる:

  1. イベント:テーブルで何かが起きる(例えばレコードの挿入)。
  2. トリガー関数:イベントが発生した時に実行されるコード。
重要:

トリガーは関数とセットじゃないと存在できないよ。関数がトリガー発動時に何をするか決めてるんだ。

トリガーの使い方例

じゃあ、どんな場面でトリガーが役立つのか、いくつか例を見てみよう。

  1. データの自動更新

学生のレコードを保存してるテーブルにlast_modifiedってフィールドがあって、レコードが変更されるたびに自動で更新したいとする。毎回手動でこのフィールドを更新する代わりに、トリガーを作れば自動でやってくれるよ。

  1. 変更のログ記録

誰がいつテーブルのデータを変更したか追跡したい時。トリガーを使えば、データが変更されるたびに監査(ログ)テーブルに自動で記録を追加できる。

  1. データのバリデーション

テーブルに追加されるデータが特定のルール(例えば学生の年齢は18歳以上)を満たしてるかチェックしたい時、トリガーで挿入前にデータを検証できる。

  1. 自動計算

ordersテーブルで注文を管理してて、注文が追加されるたびに顧客の合計購入金額を更新したい場合。これもトリガーで自動化できるよ。

トリガーを使うタイミング

トリガーの使い道が分かったところで、実際にどんな時に使うべきか話そう。

ログ記録・監査:トリガーは監査レコードを作るのに最適。重要なテーブルの変更を追跡できる。

データ整合性の維持:例えば、データベースからコースを削除した時、そのコースに紐づく学生も自動で削除して「ぶら下がりデータ」を防げる。

繰り返し作業の自動化:計算値の更新や集計データの更新など、よくある作業を自動化できる。

ビジネスロジックのDB実装:アプリのコードだけに頼らず、一部のロジックをデータベース側に持たせることもできる。

トリガーのメリット

もう分かったと思うけど、トリガーはかなり強力なツールだよ。こんな良いことがある:

自動化:人の手間が最小限。例えば、誰がデータを変更したかのトラッキングも自動でできる。

コードの重複削減:開発者が毎回アプリごとに更新やバリデーションのロジックを書く代わりに、DBに組み込める。

データ整合性の確保:トリガーはデータが常に正しい状態になるよう、追加のセーフティネットになる。

トリガーのデメリット

もちろん、どんなツールにも弱点はある。トリガーの「ダークサイド」も見てみよう:

  • デバッグが難しい:トリガーは「裏側」で動くから、思った通りに動かない時のデバッグが大変。

  • パフォーマンス問題の可能性:トリガーが複雑すぎたり、頻繁に呼ばれるとSQLクエリの実行が遅くなることも。

  • 隠れたロジック:ビジネスロジックがトリガーの中に「埋もれて」しまうと、開発者がDBの中で何が起きてるか分かりにくくなる。

リアルな利用シナリオ

例1:変更のログ記録

例えばstudentsテーブルで学生データを管理してるとする。レコードの変更を追跡したい場合、トリガーでaudit_logテーブルに学生データが変更されるたびに記録を追加できる。

例2:自動更新

studentsテーブルにlast_modifiedカラムがあって、学生データが変更されるたびに自動で値を更新したい。これは更新後に発動するトリガーで実現できるよ。

2
タスク
SQL SELF, レベル 57, レッスン 0
ロック未解除
変数の型の定義とログ出力
変数の型の定義とログ出力
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION