まず、トリガーとは、データベース内で特定のイベント(INSERT/UPDATE/DELETEなど)が発生したときに実行されるコードのことです。トリガーは暗黙的にDMLステートメントの前または後に実行され、トリガーはストアード・プロシージャーのように明示的に実行できません。
トリガーには、STATEMENT LEVELトリガーとROW LEVELトリガーの2種類があります。
STATEMENT LEVELトリガーは、ステートメントが実行される前または後に発生します。
ROW LEVELトリガーは、操作の影響を受ける個々の行で操作が実行される前または後に発生します。
1. BEFORE INSERT STATEMENT
2. BEFORE INSERT ROW
3. AFTER INSERT STATEMENT
4. AFTER INSERT ROW
5. BEFORE UPDATE STATEMENT
6. BEFORE UPDATE ROW
7. AFTER UPDATE STATEMENT
8. AFTER UPDATE ROW
9. BEFORE DELETE STATEMENT
10. BEFORE DELETE ROW
11. AFTER DELETE STATEMENT
12. AFTER DELETE ROW
複数のトリガーが言及した実行の優先順位の順序でイベントのためにコード化することができます。
は、だから我々は、トリガの12種類があります。
データベースでDMLクエリ(INSERT/UPDATE/DELETE)を実行するたびに、そのクエリはトランザクション内で実行されます。クエリが実行されるとき、従って -
- のテーブルがロックされているステートメントの前に実行トリガーの
- DBMSチェックが
- 実行される実際のSQL文の行ごとに実行します。
- 各行のBEFOREトリガーが検索されます。見つかった場合、実行されます。
- エラーをチェックしてください。存在する場合は、ステートメントまたはそのトリガーによって加えられた変更をロールバックします。
- AFTER EACH ROWトリガが検出されて実行されます。
- AFTER STATEMENTトリガーが検出されて実行されます。
異なるDBMSは、トランザクションを別々に管理します。詳細については、そのドキュメントを参照してください。
DBMSの多くは、コンパイルされたストアドプロシージャとは異なり、トリガをテキスト形式でのみ保持します。
ストアドプロシージャはトリガよりもはるかに高速なため、トリガ本体内部からストアドプロシージャを呼び出すことをお勧めします。
これはおそらく[dba.se]にあるはずです。私は実際には分からないので、私はそれを見守っています。 – Ben