컴퓨터 과학/데이터 베이스

MySQL 트리거(Trigger)란?

Data Jun 2025. 8. 20. 10:14

트리거(Trigger)는 특정 테이블에서 INSERT, UPDATE, DELETE와 같은 이벤트가 발생했을 때 자동으로 실행되는 SQL 코드를 말합니다.
즉, 개발자가 직접 실행하지 않아도, 데이터 변경이 일어나는 순간 자동으로 작동하는 "자동 실행 프로그램" 같은 역할을 합니다.

 

트리거 예제 살펴보기

DELIMITER //
CREATE TRIGGER trg_deleteMemberTBL
	AFTER DELETE -- 삭제 후에 작동
	ON membertbl -- membertbl 테이블에 연결
	FOR EACH ROW -- 삭제되는 각 행마다 실행
BEGIN 
	-- 삭제되는 행을 백업 테이블에 저장
	INSERT INTO deleteMemberTBL
		VALUES (OLD.memberID, OLD.memberName, OLD.memberAddress, CURDATE());
END//
DELIMITER ;

동작 설명

  • AFTER DELETE
    → membertbl에서 행이 삭제된 후에 트리거가 실행됩니다.
  • FOR EACH ROW
    → 삭제되는 각 행(row) 마다 트리거가 적용됩니다.
  • OLD
    → 삭제되기 전의 데이터를 참조하는 키워드입니다.
    (NEW는 추가/수정된 데이터 참조에 사용)
  • INSERT INTO deleteMemberTBL ...
    → 삭제된 데이터를 deleteMemberTBL이라는 별도 백업 테이블에 저장합니다.
    즉, 삭제 로그를 자동으로 기록하는 기능을 트리거로 구현한 것입니다.

 

DELIMITER란?

여기서 눈여겨봐야 할 부분이 DELIMITER 입니다.
MySQL에서는 SQL 문장의 끝을 구분하기 위해 세미콜론( ; ) 을 사용합니다.

하지만 스토어드 프로시저나 트리거처럼 여러 줄짜리 SQL 블록을 작성할 때는 중간에도 세미콜론을 써야 하므로, 단순히 세미콜론으로 문장의 끝을 구분하기 어렵습니다.

👉 그래서 DELIMITER 명령어를 사용해서
SQL 블록의 종료 기호를 다른 기호(//, $$ 등)로 임시 변경하는 거예요.

  • DELIMITER // → 이제부터 //를 문장의 끝으로 인식
  • 트리거 블록을 작성
  • END// → 블록의 끝을 명확히 표시
  • 마지막에 DELIMITER ; → 다시 기본 구분자(세미콜론)로 복귀

 

DELIMITER 단어의 뜻

  • 영어 사전적 의미: "구분자, 경계 표시"
  • MySQL에서의 의미: SQL 문장의 끝을 구분하기 위해 사용하는 기호를 바꾼다는 뜻

즉, "선언"이라기보다는 **“구분 기호를 지정한다(set delimiter)”**라는 의미에 가깝습니다.

 

 

정리

  • 트리거 = 특정 이벤트 발생 시 자동 실행되는 SQL 코드
  • 예제 트리거는 membertbl에서 삭제된 데이터를 deleteMemberTBL에 자동 백업
  • DELIMITER = SQL 구문 종료 기호를 변경하는 명령어 (선언이라기보다 "구분자 설정")