ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [데이터베이스] 트리거 정리
    개발/데이터베이스 2021. 11. 26. 14:05

    예전 회사에서 변경사항에 대한 로그 기록을 남기기 위해서 전체 테이블에 트리거 생성 작업을 했었는데, 당장 급하게 만들기에만 집중하여 놓쳤을 수 있는 개념들을 정리해 보려고 합니다.

     

    트리거란


    트리거(Trigger)란 영어로 방아쇠라는 뜻을 가진 단어인데, 방아쇠를 당기면 내부의 작업을 거친 후 총알이 발사됩니다.
    이처럼 데이터베이스에서도 트리거는 특정 테이블에 INSERT, DELETE, UPDATE 같은 DML문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램입니다.
    데이터베이스에서 자동적으로 호출하는 것이 가장 큰 특징입니다.

     

    트리거의 목적


    일반적으로 이벤트와 관련된 테이블의 데이터 삽입, 추가, 삭제 작업을 DBMS가 자동적으로 실행시키는 데 활용
    데이터 무결성 유지 및 로그 메시지 출력 등의 별도 처리를 위해 사용되기도 함

     

    트리거의 장단점


    장점

    1. 데이터 무결성 강화
    2. 검사 기능의 확장
    3. 업무처리 자동화
    4. 업무 규칙의 설정

    단점

    1. 유지보수의 어려움
    2. 예상치 못한 오류를 유발할 수 있음

     

    트리거의 종류


    행트리거 : 데이터 변화가 생길 때마다 실행
    문장 트리거 : 트리거에 의해 단 한 번 실행, insert, delete, update문에 대해 한 번만 실행 된다

     

    트리거의 구성


     

    구성요소 설명
    선언부
    (DECLARE)
    트리거의 명칭을 정의하는 부분
    이벤트부
    (EVENT)
    트리거가 실행되는 타이밍, 이벤트를 명시하는 부분
    시작/종료부
    (BEGIN/END)
    트리거의 시작과 종료를 표현하는 데 필수적이며, BEGIN/END가 쌍을 이루어 추가되므로 블록으로 구성
    다수 실행을 제어하는 기본적 단위가 되며 논리적 프로세스를 구성
    제어부
    (CONTROL)
    기본적으로는 순차적으로 처리
    비교 조건에 따라 블록 또는 문장을 실행
    조건에 따라 반복 실행
    SQL DML을 주로 사용하고, 자주 사용되지 않지만 DDL(TRUNCATE 등)을 사용
    예외부
    (EXCEPTION)
    BEGIN~END 절에서 실행되는 SQL문이 실행될 때 예외 발생 시 예외 처리 방법을 정의하는 처리부

     

    트리거 예시


    -- 선언부
    CREATE TRIGGER INSERT_TABLE_NAME
    
    -- 이벤트부
    AFTER INSERT ON TABLE_NAME
    FOR EACH ROW
    
    -- 시작/종료부
    BEGIN
    
    -- 제어부
    IF INSERTING -- IF INSERTING, IF UPDATING, IF DELETING
    THEN
    -- SQL
      INSERT INT TABLE_NAME_HISTORY
      (
        COL_1,
        COL_2, 
        COL_3
      ) VALUES (
        :NEW.COL_1,
        :NEW.COL_2,
        "INSERT"
      );
    
    END IF;
    END;

    댓글

Designed by Tistory.