본문 바로가기

IT

트리거 (TRIGGER)

728x90

트리거 정의 

💡 트리거(TRIGGER)란 테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업을 의미한다.

 

테이블에 대한 이벤트 ⇒ INSERT, UPDATE, DELETE과 같은 작업이 발생되면 자동으로 실행되는 코드로 DML의 데이터 상태 관리를 자동화하는 데 사용된다.

예시 1) 구글 로그인 시 예전 비밀번호를 입력하면 몇개월 전 변경되었다는 알림이 나온다.

⇒ 비밀번호를 변경함과 동시에 이전의 비밀번호를 트리거를 활용하여 삭제될 데이터를 자동으로 저장해주는 용도로 사용됨을 볼 수 있다.

예시 2) 대학교를 자퇴했는데 추후에 내가 다녔던 기록을 알고 싶으면 조회할 수 있다.

⇒ 대학교를 자퇴함에 학교 테이블에서 삭제함과 동시에 트리거를 활용하여 다른 곳에 자동으로 저장할 수 있음

종류 설명

행 트리거 데이터 변화가 생길 때마다 실행되며 테이블 안의 영향을 받은 행 각각에 대해 실행된다. 변경 전 또는 변경 후의 행은 OLD(before), NEW(after)라는 가상 줄 변수를 사용하여 읽을 수 있다.
문장 트리거 트리거에 의해 단 한 번 실행되며 INSERT, UPDATE, DELETE 문에 대해 한번만 실행된다.

트리거 장단점

트리거 장점

  • 데이터 무결성의 강화 (참조 무결성)
    • 무결성이란 데이터의 정확성, 일관성, 유효성이 유지되는 것을 말한다.
    • 참조 무결성은 관계형 데이터베이스 모델에서 참조 무결성은 참조 관계에 있는 두 테이블의 데이터가 항상 일관된 값을 갖도록 유지되는 것을 말한다.
  • 업무처리 자동화
    • 트리거를 사용하면 트랜잭션에 의해 자동으로 다른 명령을 일으킴으로써 업무처리를 자동화할 수 있다.
    • 중간에 사용자가 개입하지 않고 구현된 규칙대로 알아서 실행된다는 것 이다.
  • 검사 기능의 확장
    • 사용자의 편의성 제공
    • 효과적인 데이터 보관

트리거 단점

  • 트리거를 과도하게 사용한다면 복잡한 상호 의존성을 야기할 수 있다.
    • 예를 들어 하나의 트리거가 활성화되어 이 트리거 내의 SQL문이 수행되고, 그 결과로 인하여 다른 트리거가 활성화되어 그 트리거의 SQL문이 수행될 수 있다. ⇒ 트리거의 연쇄를 불러일으켜 복잡한 상호 의존성을 야기함.
  • 유지보수의 어려움
  • 예상치 못한 오류 유발
    • 문서화되지 않았다면 파악하는데 상당한 어려움을 가짐

트리거 구성

트리거 구성

구성요소 설명

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

선언부(DECLARE)

CREATE TRIGGER 트리거명

이벤트 부(TRIGGER)

순서 이벤트 ON 테이블명
[FOR EACH ROW]

-- 순서 : BEFORE, 이벤트 : 하나의 이벤트(INSERT)
BEFORE INSERT ON TABLE_NAME

-- 순서 : AFTER, 이벤트 : 여러 이벤트(INSERT, DELETE)
AFTER INSERT OR DELETE ON TABLE_NAME

-- 순서 : AFTER, 이벤트 : 하나의 이벤트(INSERT)
AFTER INSERT ON TABLE_NAME
FOR EACH ROW -- 변경되는 데이터 행의 수만큼 실행 INSERT, DELETE 는 FOR EACH ROW 없이 사용할 수 없음

시작/종료부(BEGIN/END)

트리거의 실행 시작과 종료를 알려주는 부분으로 프로시저에 BEGIN, END는 프로시저에 반드시 포함되어야 한다.

제어부(CONTROL)

단위 블록별 실행흐름을 제어하는 부분으로 크게 IF문과 CASE문으로 나뉜다.

SQL

SELECT, INSERT, UPDATE, DELETE 를 주로 사용합니다.
행 트리거 안에서 접두어를 붙여 OLD(데이버 변경 전) NEW(데이터 변경 후) 값을 참조한다.

예외부(EXCEPTION)

반드시 포함될 필요는 없습니다.트리거 실행 중 발생 가능한 예외 상황을 수행하는 부분입니다.

 

 

 

'IT' 카테고리의 다른 글

Linux(centOS9) 설정 1(CentOS, Virtural BOX, PuTTy 원격 접속)  (0) 2022.08.24
Spring MVC 구조  (0) 2022.08.22
스프링 의존 관계 주입(DI)  (0) 2022.08.09
스프링 어노테이션 정리  (1) 2022.08.09
Spring Security  (0) 2022.08.09