DB/MySQL

[DB] 트리거(Trigger) / MySQL 사용법

계범 2022. 2. 23. 20:30

트리거(Trigger) 정의

트리거는 사전적 의미로는 '방아쇠'를 뜻한다.

방아쇠를 당기면 '자동'으로 총알이 나가듯이, 테이블에 무슨 일이 일어나면 '자동'으로 실행되는 것이다.

 

즉, 테이블에 부착되어서 테이블에 INSERT,UPDATE,DELETE 작업이 발생되면 자동으로 실행되는 코드를 뜻함.

 

트리거 명령어

# 생성
DELIMITER //
CREATE TRIGGER 트리거이름
	{BEFORE:AFTER} {INSERT | UPDATE| DELETE } # 뒤의 조건(삽입,수정,삭제)이 발생하기 전/후
    ON 테이블명 # 트리거를 부착할 테이블
    FOR EACH ROW # 각 행마다 적용
    BEGIN
    	트리거 내용
    END //
    
# 수정은 불가

# 삭제
DROP TRIGGER

 

트리거가 생성하는 임시 테이블

NEW 테이블은 INSERT와 UPDATE 작업 시 변경할 새로운 데이터를 잠깐 저장해둠.

OLD 테이블은 DELETE와 UPDATE 작업 시 삭제 또는 변경되기 전의 예전 값을 저장해둠.

 

OLD.컬럼명, NEW.컬럼명 으로 사용 가능

 

기타 트리거

다중 트리거: 하나의 테이블에 동일한 트리거가 여러개 부착되어 있는 것을 뜻함.

중첩 트리거: 트리거가 또 다른 트리거를 작동하는 것을 뜻함.

EX) INSERT 트리거안에 UPDATE 트리거 작동.

 

My SQL에선 재귀 트리거는 지원하지 않음.

 

트리거 작동 순서

하나의 테이블에 여러개의 트리거가 부착되어 있으면, 작동 순서를 지정할 수 있음.

{ FOLLOWS : PRECEDES } 트리거 이름

# FOLLOWS로 지정하면, 지정한 트리거이름 다음에 현재 트리거 작동
# PRECEDES로 지정하면, 지정한 트리거이름 전에 현재 트리거 작동

 

트리거 특징 및 사용 이유

특징

  1. 직접 실행 불가. 해당 테이블에 이벤트가 발생할 경우에만 실행
  2. 하나의 트랜잭션으로 인식.
    1. 데이터 삽입 시 수정 트리거를 걸어놨을때 ROLLBACK 실행하면, 둘다 취소됨.
  3. 복잡성을 야기하여 유지보수의 어려움.

 

사용 이유

  1. 데이터의 무결성을 위해 사용
    • 해당 테이블의 데이터가 삭제될때, 연관 테이블도 삭제해야한다던지 등의 경우에 사용
  2. 업무의 규칙을 보장
  3. 업무 처리 자동화

 

참조

'이것이 MySQL이다' 책 참조