본문 바로가기
DB/MySQL

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

by 계범 2022. 2. 23.

트리거(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이다' 책 참조

댓글