[MySQL] 트리거(Trigger)

코린이·2025년 6월 15일

MySQL

목록 보기
21/23

✅ 트리거(Trigger)

MySQL에서 트리거는 데이터베이스에서 테이블에 입력, 수정, 삭제 등의 이벤트가 발생되었을 때 실행되는 프로시저다.
(트리거는 로그 기록용도로 많이 사용)

특이점으로 MySQL의 트리거는 DDL문을 수행할 때 동작하는 트리거를 제공되지 않는다.

즉, MySQL의 트리거는 DML문(INSERT, UPDATE, DELETE)이 수행될 때 실행된다.

이러한 트리거는 크게 2가지가 존재하며, 트리거에는 IN/OUT 매개변수를 사용할 수 없다.

  • BEFORE 트리거 : 변경 전을 기록
  • AFTER 트리거 : 변경 후를 기록

📌 트리거 기본 구조

트리거에는 이벤트 시작 전/후를 기준으로 데이터를 저장할 수 있다.

이때 이벤트 시작 이전 데이터는 OLD 키워드를 사용하여 데이터를 불러올 수 있고, 이벤트 시작 이후 데이터는 NEW 키워드를 사용하여 데이터를 불러올 수 있다.

NEWOLD
INSERT사용 가능사용 불가
DELETE사용 불가사용 가능
UPDATE사용 가능사용 가능
DELIMITER $$
CREATE TRIGGER <트리거명>
	<BEFORE 또는 AFTER> <INSERT 또는 UPDATE 또는 DELETE>
		ON <원본 테이블>
	FOR EACH ROW -- 원본 테이블의 모든 행에 대해 적용
BEGIN
	트리거 로직 작성...
END $$
DELIMITER ;

트리거 예시 : 고객 정보 테이블에 값이 추가(insert)되면 트리거 동작

-- 고객정보 테이블 : cust_tb
-- 트리거 로그 기록용 테이블 : log_insert_tb
DELIMITER $$
CREATE TRIGGER log_insert_trg
	ALTER INSERT 
    	ON cust_tb
	FOR EACH ROW -- 원본 테이블의 모든 행에 대해 적용
BEGIN
	insert into log_insert_tb(NEW.col1, NEW.col2, ...);
END $$
DELIMITER ;

0개의 댓글