以下のトリガーのケースでは、あらゆる形式の参照整合性のリクエストに対して、トリガーが参照整合性違反エラーを返します。
- トリガー文が、関係内の子テーブルに対するUPDATE操作である場合。
- トリガー文が、関係内の子テーブルに対するDELETE操作である場合。
- トリガーがカスケードされている場合。
以下のトリガーのケースでは、バッチ参照整合性を使用して関係が定義されている場合に限り、参照整合性関係を持つテーブルに対してトリガーが有効になります(バッチ参照整合性制約を参照してください)。
- トリガー文が、関係内の親テーブルに対するDELETE操作である場合。
- トリガー文が、関係内の親テーブルに対するUPDATE操作である場合。
- トリガー文が、関係内の子テーブルに対するINSERT操作である場合。
- トリガー文が、関係内の子テーブルに対するINSERT操作であり、INSERT … SELECT操作をトリガーするアクション文として定義する場合。
- カスケードされたトリガーの場合、システムではINSERT操作のみをトリガー文として扱います。たとえば、関係内の親テーブルに対するINSERT操作および子テーブルに対するINSERT操作です。
カスケードされたその他のトリガーは無効です。
次のテーブル定義を考えてみましょう。テーブルを定義することで、参照整合性のチェック階層が構成されます。バッチRIは、テーブルchild_tab(parent_tabを参照)およびテーブルgrandchild_tab(child_tabを参照)で定義されます。
これらのテーブルに対する外部キーは、FOREIGN KEYを指定するのではなく、REFERENCES句を使用して暗黙に定義されていることに注意してください。ただし、定義された参照整合性チェック項目は、キーワードにFOREIGN KEYを指定した場合と同じになります。
トリガーはこれらのテーブルで定義されます。
CREATE TABLE parent_tab ( prime_key INTEGER NOT NULL, column_2 INTEGER, null_col CHARACTER DEFAULT NULL) UNIQUE PRIMARY INDEX (prime_key); CREATE TABLE child_tab ( prime_key INTEGER NOT NULL, null_col CHARACTER DEFAULT NULL, for_key INTEGER REFERENCES WITH CHECK OPTION parent_tab (prime_key)) UNIQUE PRIMARY INDEX (prime_key); CREATE TABLE grandchild_tab ( prime_key INTEGER NOT NULL, column_3 INTEGER, grc_key INTEGER REFERENCES WITH CHECK OPTION child_tab (prime_key)) UNIQUE PRIMARY INDEX (prime_key);
サポートされるテーブルおよび各トリガー文の参照レベルの定義について考えてみましょう。
レベル | トリガー文 | RI関係内のテーブル |
---|---|---|
1 |
|
親 |
2 |
|
子 |
次の表に、対となるテーブルのバッチ参照整合性関係を示します。
レベル | テーブル間のバッチ参照整合性関係 |
---|---|
1 |
|
2 |
|