11.19.6 参照制約とトリガ
- 〈この項の構成〉
(1) 参照制約動作のトリガ
参照制約動作にCASCADEを指定すると,HiRDBが内部的に参照表を更新するトリガを被参照表に対して生成します。HiRDBが内部的に生成するトリガは,次の場合に無効になるため,再作成する必要があります。ただし,HiRDBが生成したトリガだけを再作成することはできません。ALTER ROUTINEを使用して無効になったトリガすべてを再作成してください。また,インデクスの定義,又は削除でインデクス情報が無効になった場合は,ALTER ROUTINEにALL指定をしてトリガを再作成してください。
-
更新の場合
-
参照表の表定義を変更した場合
-
参照表にインデクスを定義した場合
-
参照表のインデクスを削除した場合
-
参照表に,トリガ契機がUPDATEのトリガを生成する場合
-
参照表のトリガ契機がUPDATEのトリガを削除する場合
-
参照表が参照する被参照表の主キー構成列の表定義を変更した場合
-
-
削除の場合
-
参照表の表定義を変更した場合
-
参照表にインデクスを定義した場合
-
参照表のインデクスを削除した場合
-
参照表に,トリガ契機がDELETEのトリガを生成する場合
-
参照表のトリガ契機がDELETEのトリガを削除する場合
-
また,HiRDBが内部的に生成するトリガは,参照表削除(DROP TABLE,又はDROP SCHEMA)時に削除されます。
(2) 参照制約とユーザが定義したトリガの関係
トリガや参照制約が定義されている表に,更新系SQL(INSERT文,UPDATE文,又はDELETE文)を実行する場合の,トリガ,参照制約の整合性チェック,及び参照制約動作(HiRDBが参照制約定義時に内部的に生成するトリガ)の動作順序について説明します。これらの動作順序は,条件によって二つのパターンがあります。
- パターン1の条件:
-
更新対象が被参照で参照制約動作の指定がRESTRICTだけの場合と,更新対象が参照表の場合
- パターン2の条件:
-
更新対象が被参照で参照制約動作の指定にRESTRICT以外がある場合
なお,更新対象の表が参照表であり,かつ被参照表でもある場合は,被参照表の条件が優先されます。
二つのパターンの場合の動作順序をそれぞれ次に示します。
パターン1
- 注※
-
参照制約の整合性はすべてこの時点でチェックされます。チェック内容を次に示します。
-
更新対象が参照表の場合
更新(INSERT,UPDATE)データが被参照表に含まれているかどうか
-
更新対象が被参照表の場合
更新(UPDATE,DELETE)データが参照表に含まれているかどうか
-
更新対象が参照表で,かつ被参照表の場合
上記1,2のチェック内容
-
パターン2
- 注※
-
参照制約の整合性はすべてこの時点でチェックされます。チェック内容はパターン1と同じです。