[정보처리기사 필기] SQL 활용 - 087. 트리거 Trigger

1. 트리거의 개요

  • 데이터베이스 시스템에서 데이터의 삽입 Insert, 갱신 Update, 삭제 Delete 등의 이벤트 Event가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL
    • 이벤트 : 시스템에 어떤 일이 발생한 것, 트리거에서 이벤트는 데이터 조작 작업이 발생했음을 의미
  • 데이터베이스에 저장되며, 데이터 변경 및 무결성 유지, 로그 메시지 출력 등의 목적으로 사용
    • 무결성 : 데이터베이스에 들어 있는 데이터의 정확성을 보장하기 위해 정확하지 않은 데이터가 데이터베이스 내에 저장되는 것을 방지하기 위한 제약 조건
    • 로그 메시지 출력 : 명령어, 데이터 처리 과정 및 결과 등을 기록으로 남긴 로그를 메시지로 출력할 때 이용
  • 트리거의 구문에는 DCL(데이터 제어어)을 사용할 수 없으며, DCL이 포함된 프로시저나 함수를 호출하는 경우에도 오류가 발생
  • 트리거에 오류가 있는 경우 트리거가 처리하는 데이터에도 영향을 미치므로 트리거를 생성할 때 세심한 주의가 필요

2. 트리거의 구성

  • 선언, 이벤트 시작, 종료로 구성
  • 시작과 종료 구문 사이에는 제어 CONTROL, SQL, 예외 EXCEPTION가 포함
  • 트리거 구성도
    • DECLARE : 트리거의 명칭, 변수 및 상수, 데이터 타입을 정의하는 선언부
    • EVENT : 트리거가 실행되는 조건을 명시
    • BEGIN / END : 트리거의 시작과 종료를 의미
    • CONTROL : 조건문 도는 반복문이 삽입되어 순차적으로 처리
    • SQL : DML문이 삽입되어 데이터 관리를 위한 조회, 추가, 수정, 삭제 작업을 수행
    • EXCEPTION : BEGIN ~ END 안의 구문 실행 시 예외가 발생하면 이를 처리하는 방법을 정

3. 트리거의 생성

  • 명령어 : CREATE TRJIGGER
  • 표기 형식
    • CREATE [OR REPLACE] TRIGGER 트리거명 동작시기 동작 ON 테이블명
      [REFERENCING NEW | OLD AS 테이블명]
      [FOR EACH ROW [WHEN 조건식]]
      BEGIN
         트리거 BODY;
      END;
      OR REPLACE : 선택적인 Optional 예약어, 동일한 트리거 이름이 이미 존재하는 경우, 기존의 트리거를 대체할 수 있음
    • 동작시기 : 트리거가 실행될 때를 지정
      • AFTER : 테이블이 변경된 후에 트리거가 실행
      • BEFORE : 테이블이 변경되기 전에 트리거가 실행
    • 동작 : 트리거가 실행되게 할 작업 종류를 지정
      • INSERT : 테이블에 새로운 튜플을 삽입할 때 트리거가 실행
      • DELETE : 테이블의 튜플을 삭제할 때 트리거가 실행
      • UPDATE : 테이블의 튜플을 수정할 때 트리거가 실행
    • NEW | OLD : 트리거가 적용될 테이블의 별칭을 지정
      • NEW : 추가되거나 수정에 참여할 튜플들의 집합(테이블)을 의미
      • OLD : 수정되거나 삭제 전 대상이 되는 튜플들의 집합(테이블)을 의미
    • FOR EACH ROW : 각 튜플마다 트리거를 적용한다는 의미
    • WHEN 조건식 : 선택적인 Optional 예약어, 트리거를 적용할 튜플의 조건을 지정
    • 트리거 BODY 
      • 트리거의 본문 코드를 입력하는 부분
      • BEGIN으로 시작해서 END로 끝나는데, 적어도 하나 이상의 SQL문이 있어야 함, 그렇지 않으면 오류 발생

4. 트리거의 제거

  • 명령어 : DROP TRIGGER
  • 표기형식
    • DROP TRIGGER 트리거명;