데이터베이스 트리거

데이터베이스 트리거(Database Trigger)는 테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업을 의미한다. 트리거는 데이터 조작 언어(DML)의 데이터 상태의 관리를 자동화하는 데 사용된다. 트리거를 사용하여 데이터 작업 제한, 작업 기록, 변경 작업 감사 등을 할 수 있다.

유형 
트리거에는 크게 나누어 행 트리거와 문장 트리거의 두 종류가 있다.

 행 트리거: 테이블 안의 영향을 받은 행 각각에 대해 실행된다. 변경 전 또는 변경 후의 행은 OLD, NEW라는 가상 줄 변수를 사용하여 읽을 수 있다.
 문장 트리거:INSERT, UPDATE, DELETE 문에 대해 한번만 실행된다.

또한 트리거는 다음과 같은 속성을 갖는다.
 BEFORE 또는 AFTER
트리거가 실행되는 시기를 지정한다.
 INSTEAD OF
트리거를 원래 문장 대신 수행한다.
 WHEN
트리거를 시작하는 조건식을 지정한다.

일반적으로 트리거는 다음의 3 가지 경우에 시작된다. 트리거는 SELECT 문에 의한 데이터 검색에 영향을 미칠 수 없다.
 INSERT (새로운 행 삽입)
 UPDATE (기존 행의 변경) / UPDATE OF (기존 행의 특정 열 변경)
 DELETE (기존 행 삭제)

오라클 트리거 
오라클 데이터베이스는 표준 트리거 외에 Oracle 9i에서 "스키마 레벨 트리거"라는 스키마 변경 및 사용자 로그인 / 로그 오프에 대한 트리거가 추가되었다.
 INSERT
 UPDATE
 DELETE
 AFTER CREATE
 BEFORE / AFTER ALTER
 BEFORE / AFTER DROP
 BEFORE LOGOFF / AFTER LOGON

마이크로소프트 SQL 서버 트리거 
Microsoft SQL Server에서는 표준 트리거 외에 뷰 에 INSTEAD OF 트리거를 정의 할 수 있다. 또한 Microsoft SQL Server 2005에서 데이터 정의 언어(DDL) 트리거가 추가되었다.
 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
트리거에서 실행되는 프로세스는 직접 작성하지 않고 함수로 준다.

문법 :
 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
주의: MySQL은 각 테이블에 각 형태의 단 하나의 트리거만 허용한다. (즉, 인서트 이전에 하나, 인서트 이후에 하나, 업데이트 이전에 하나, 업데이터 이후에 하나, 삭제 전후에 각각 하나씩)

주의: MySQL은 구문을 외부에서 격발하지 않는다. (즉, API, 외래 키 캐스캐이드)

문법 :
 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;

외부 링크 
 Oracle CREATE TRIGGER
 DB2 CREATE TRIGGER statement
 Microsoft SQL Server CREATE TRIGGER / DROP TRIGGER
 PostgreSQL CREATE TRIGGER
 MySQL Database triggers

데이터 모델링
데이터베이스
데이터베이스 관리 시스템