본문 바로가기

언어/DB

트리거 (Trigger)

MySQL 에서 트리거는 테이블에서 어떤 이벤트가 발생했을 때 자동으로 실행되는 것을 말합니다.

즉, 어떤 테이블에서 특정한 이벤트 (update, insert, delete) 가 발생했을때, 실행시키고자 하는 추가 쿼리 작업들을 자동으로 수행할수 있게끔 트리거를 미리 설정해두는 것입니다.

 

  •  데이터베이스 트리거는 테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업을 의미
  •  테이블에 DML문 (Insert, Update , Delete) 등 이벤트가 발생될 때 작동
  •  테이블에 부착되는 프로그램 코드
  •  자기가 직접 실행 불가. 테이블에 이벤트 일어나야 자동 실행
  •  IN, OUT 매개 변수를 사용 할 수 없음
  •  MySQL 은 View 에 트리거 부착 불가 

 

행 트리거

  •  테이블 안의 영향을 받은 행 각각에 대해 실행된다.
  •  변경 전 또는 변경 후의 행은 OLD, NEW 라는 가상 줄 변수를 사용하여 읽을 수 있다.
    • OLD : 예전 데이터 즉, delete 로 삭제된 데이터 또는 update 로 바뀌기 전의 데이터
    • NEW : 새 데이터 즉, insert 로 삽입된 데이터 또는 update로 바뀐 후의 데이터 

 

트리거 이벤트 OLD NEW
INSERT X O
UPDATE O O
DELETE  O X

 

문장 트리거

  • INSERT, UPDATE, DELETE 문에 대해 한번만 실행된다.
  • 삽입, 갱신 또는 삭제되는 행수에 관계없이 각 트랜잭션에 대해 명령문 레벨 트리거가 한번 실행된다.

 

BEFORE 또는 AFTER : 트리거가 실행되는 시기를 지정한다.

  • after 트리거 : 쿼리 이벤트  작동하기 후
  • before 트리거 : 쿼리 이벤트 작동하기 전에 미리 데이터를 확인 가능

 

트리거 생성

DELIMITER $$

CREATE TRIGGER [트리거 명]
AFTER UPDATE  -- {BEFORE | AFTER } {INSERT | UPDATE | DELETE } : 문장 트리거
ON [트리거를 부착할 테이블 명]
FOR EACH ROW 		-- 아래 나올 조건에 해당 하는 모든 row 에 적용한다는 뜻

BEGIN 
	-- 트리거 시 실행할코드 
END $$
 
 DELIMITER ;

 

트리거 삭제 

DELETE TRIGGERS;