トリガー とは、 特定の表での削除、挿入、または更新操作時に実行される処置、 またはそれらの操作によって引き起こされる処置の集まりを定義するものです。 このような SQL 操作が実行されるとき、 トリガーが起動される といいます。
トリガーは、データ保全規則を実施するために、 参照制約および検査制約と共に使用することができます。 また、他の表を更新したり、 挿入行または更新行の値を自動的に生成または変換したり、 警告を出すなどのタスクを実行する関数を呼び出したりする場合にも使用できます。
トリガーは、データの異なる様々な状態が関係した規則である 遷移 業務規則を定義し実施するのに便利なメカニズムです (たとえば、 給与は 10 パーセントを超えて増加することはない、など)。 データの複数の状態が関係しない規則については、 検査制約と参照保全制約を考慮してください。
トリガーを使用すると、 業務規則を実施する論理をデータベースの中に組み込むことができ、 表を使用するアプリケーション側で業務規則を実施する必要がなくなります。 すべての表に対して実施する論理を集中管理することによって、 論理が変わってもアプリケーション・プログラムを変更する必要がないため、 保守が容易になります。
トリガーは任意選択であり、CREATE TRIGGER ステートメントで定義されます。
トリガーの作成時には、トリガーをいつ起動するかを決めるために使われる基準を定義します。
そのような操作として、削除、挿入、更新があります。
トリガーを起動するステートメントには、 影響を受ける行の集合 を含めます。
トリガー細分性 は、 トリガーの処置がステートメントに対して 1 回実行されるのか、 影響を受ける行集合の中の行ごとに 1 回ずつ実行されるのかを定義します。
トリガー・アクション は、任意選択の探索条件、 およびトリガーが起動されると必ず実行される SQL ステートメントの集合で構成されます。
この SQL ステートメントは、探索条件が真の場合にのみ実行されます。 トリガー起動時がトリガー事象の前である場合、トリガー・アクションには、選択、 変換変数の設定、SQLSTATE の通知を行うステートメントを組み込むことができます。 トリガー起動時がトリガー事象の後である場合、トリガー・アクションには、選択、 更新、挿入、削除、SQLSTATE の通知を行うステートメントを組み込むことができます。
トリガー・アクションでは、影響を受ける行の集合の中の値を参照することもできます。 これは、変換変数 の使用によりサポートされます。
変換変数では、対象表の列の名前を、 参照が (更新の前の) 古い値に対するものか (更新の後の) 新しい値に対するものかを識別する、 所定の名前によって修飾したものを使用します。 更新トリガーまたは挿入トリガーの前に、 SET 変換変数ステートメントを使って新しい値を変更することもできます。 影響を受ける行の集合内の値を参照するもう 1 つの方法は、 変換表 を使用することです。
変換表も対象表の列の名前を使用しますが、 影響を受ける行の集合全体が 1 つの表として扱われるように名前が指定されます。 変換表は、トリガー後に限り使用することができます。さらに、 古い値と新しい値について、個別の変換表を定義することができます。
表、事象、または起動時の 1 つの組み合わせに対して、 複数のトリガーを指定することができます。 トリガーは作成順に起動されます。 このため、最後に作成されたトリガーは最後に起動されることになります。
トリガーの起動により、 トリガー・カスケード が発生する場合があります。
これは、1 つのトリガーの起動によって、 他のトリガーや同じトリガーを再度起動する SQL ステートメントが実行される場合に発生します。 トリガー・アクションは、元々の変更の結果として更新操作を引き起こしたり、 別のトリガーを起動する可能性のある参照保全削除規則の結果として、 更新操作を引き起こしたりする場合もあります。 トリガー・カスケードが発生すると、 トリガーと参照保全削除規則とのかなり大きな連鎖が起動されて、 1 回の削除、挿入、または更新ステートメントの結果として、 データベースにかなりの変更が加えられる場合があります。