データベーストリガ

ウィキペディアから無料の百科事典

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

トリガの種類[編集]

トリガには大きく分けて「行トリガ」と「文トリガ」の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) トリガが追加された。

PostgreSQL のトリガ[編集]

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

  • INSERT
  • UPDATE / UPDATE OF
  • DELETE
  • TRUNCATE

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

文法:

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; 

外部リンク[編集]