데이터베이스 트리거
데이터베이스 트리거(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;