トリガとは?
特定のテーブルに対する操作(挿入・更新・削除)をトリガーとして、あらかじめ定義された処理を自動的に実行する機能のことです。例えば、社員テーブルが更新されたタイミングで担当者テーブルも自動的に更新させるようにする等です。
メリット
テーブル間のデータの整合性を保つようにすることが可能です。
デメリット
ビジネスロジックがアプリとデータベースで分散してしまいます。なので基本的にトリガは使わない方が良いと言われています。「そこにロジックがあったのかあ」とアプリの実装コードだけ読んでいても気づくことができないですからね。
ただ、昔からのシステムとかであればトリガーを使って実装してあるというケースも少なくないので存在だけは知っておいてもし利用されていた場合にある程度は追えるようにしておく心構えは重要だと思います。
用途
用途 | 説明 |
---|---|
イベントロギング | 監査やセキュリティ要件実現のため |
ビジネスルールの実現 | 何らかの理由でアプリ側ではなくRDBMS側で処理を実行したい場合 |
タイミング
処理を実行する直前と直後にそれぞれトリガを作成することが可能です。
構文
1 2 3 4 5 6 7 8 9 10 |
CREATE TRIGGER トリガー名 (BEFORE | AFTER) (INSERT/UPDATE/DELETE) OF 対象列 ON 対象のテーブル REFERENCING (NEW/OLD) ROW AS 行の別名 FOR EACH (ROW/STATEMENT) WHEN (条件式:REFERENCINGで定義した別名を使える。) BEGIN トリガで実行したいSQL END |
OF 対象列 ON 対象のテーブル
対象テーブルの対象列が更新された際にトリガを発動させれます。OFを省いたら対象テーブルだけに範囲を広げることが可能です。
REFERENCING (NEW/OLD) ROW AS 行の別名
NEWであれば操作後の行、OLDであれば操作前の行に対する別名を指定します。後続のWHEN等でトリガを実行する際の条件等を指定する場合は活用することができます。
FOR EACH (ROW/STATEMENT)
ROW
行ごとにトリガ を実行します。1回のSQLで行ごとに複数回トリガ を実行することが可能です。
STATEMENT
一回のSQLに対して1回のみトリガ を実行します。
WHEN (条件式:REFERENCINGで定義した別名を使える。)
トリガを実行する条件を指定するために指定します。
この記事へのコメントはありません。