트리거(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 구문 종료 기호를 변경하는 명령어 (선언이라기보다 "구분자 설정")
'컴퓨터 과학 > 데이터 베이스' 카테고리의 다른 글
| 뷰(View)란 무엇일까? (1) | 2025.08.20 |
|---|---|
| 데이터베이스 개체(Object) 간단 정리 (1) | 2025.08.20 |
| 스토어드 프로시저(Stored Procedure)란? (0) | 2025.08.20 |
| Foreign Key: 논리적 vs 물리적 (0) | 2025.08.19 |
| MySQL 외래키(Foreign Key)와 ON DELETE 제약조건 (0) | 2025.08.19 |