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 |