データベーストリガは、表に対するイベントに反応して自動的に実行される操作を意味する。トリガはデータ操作言語によるデータ状態の管理を自動化するために用いられる。トリガを利用することで、データ操作の限定、操作の記録、変更操作の監査などを行うことができる。

トリガの種類 トリガには大きく分けて「行トリガ」と「文トリガ」の2つの種類がある。 行トリガ 表の中の影響を受けた行それぞれに対して実行される。変更前または変更後の行は OLD, NEW という擬似的な行変数を使って読み取ることができる。 文トリガ INSERT, UPDATE, DELETE 文に対して一度だけ実行される。

また、トリガは以下の属性を持つ。 "BEFORE" または "AFTER" トリガが実行されるタイミングを指定する。 "INSTEAD OF" トリガを元の文の代わりに実行する。 "WHEN" トリガを起動する条件式を指定する。

一般的に、トリガは以下の3つのイベントにより起動される。トリガでは SELECT 文によるデータ取得に影響を及ぼすことはできない。 INSERT (新しい行の挿入) UPDATE (既存の行の変更) / UPDATE OF (既存の行の特定の列の変更) DELETE (既存の行の削除)

Oracle のトリガ Oracle Database では標準のトリガの他、Oracle 9i にて「スキーマレベルトリガ」と呼ばれる、スキーマの変更やユーザのログイン/ログオフに対するトリガが追加された。

INSERT UPDATE DELETE AFTER CREATE BEFORE/AFTER ALTER BEFORE/AFTER DROP BEFORE LOGOFF / AFTER LOGON

Microsoft SQL Server のトリガ Microsoft SQL Server では標準のトリガの他、ビューに対して INSTEAD OF トリガを定義できる。また、Microsoft SQL Server 2005 にて データ定義言語 (DDL) トリガが追加された。 Microsoft SQL ServerのDDLトリガーで利用可能な全ての発動イベントのリストは、Microsoft Docsで入手可能である。

INSERT UPDATE DELETE DROP TABLE CREATE TABLE ALTER TABLE ログイン

PostgreSQL のトリガ PostgreSQL はバージョン 6.2 (1997年) から標準トリガがサポートされている。さらにバージョン 8.4 で TRUNCATE イベント、9.0 で UPDATE OF, WHEN 句をサポートした。 INSERT UPDATE / UPDATE OF DELETE TRUNCATE

10.0 で REFERENCING TABLE 句をサポートした。

11.0 で EXECUTE FUNCTION 句をサポートした。

14.0 で OR REPLACE 句をサポートした。

トリガにて実行される処理は直接記述せず、関数として与える。

文法: CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] } ON table [ FOR [ EACH ] { ROW | STATEMENT } ] [ WHEN (...) ] EXECUTE PROCEDURE funcname ( arguments )

MySQL のトリガ MySQL はバージョン 5.0.2 にて標準トリガがサポートされた。 INSERT UPDATE DELETE

文法: CREATE TRIGGER salary_trigger BEFORE UPDATE ON employee_table REFERENCING NEW ROW AS n, OLD ROW AS o FOR EACH ROW IF n.salary <> o.salary THEN ... END IF;

SQLite のトリガ SQLite は、文トリガーではなく、行トリガーのみをサポートする。 SQLite ではサポートされていない更新可能なビューは、INSTEAD OF トリガーを使用してエミュレートできる。

文法: CREATE [TEMP | TEMPORARY] TRIGGER [IF NOT EXISTS][database_name .] trigger_name [BEFORE | AFTER | INSTEAD OF] {DELETE | INSERT | UPDATE [OF column_name [, column_name]...]} ON {table_name | view_name} [FOR EACH ROW] [WHEN condition is mandatory ] BEGIN ... END

脚注

外部リンク Oracle CREATE TRIGGER DB2 CREATE TRIGGER statement Microsoft SQL Server CREATE TRIGGER / DROP TRIGGER PostgreSQL CREATE TRIGGER MySQL Database triggers