데이터베이스 트리거

위키백과, 우리 모두의 백과사전.

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


외부 링크[편집]