SQL 트리거(Trigger)는 사용자가 특정 테이블과 상호작용할 때 다른 여러 이벤트를 자동으로 연쇄 실행시키는 이벤트입니다. 이 SQL 기능은 폼 데이터 검증이나 비즈니스 규칙 강제 등에 유용하게 활용됩니다.
트리거가 실행되는 시점
트리거는 아래 세 가지 이벤트가 발생하기 전(BEFORE) 또는 후(AFTER)에 실행됩니다.
- INSERT – 새로운 행(row)이 삽입될 때
- UPDATE – 기존 행이 수정될 때
- DELETE – 행이 삭제될 때
어떤 트리거가 실행되고 어떤 동작이 수행되는지는 작성 방식에 따라 달라집니다. 먼저 CREATE 문부터 살펴보겠습니다.
CREATE TRIGGER <trigger_name> [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON <table_name> [FOR EACH ROW|FOR EACH STATEMENT] BEGIN <trigger_logic> END;
<>로 묶인 부분에는 원하는 이름이나 로직을 직접 입력하고, [ ] 안에서는 제시된 옵션 중 하나를 선택하면 됩니다.
BEFORE/AFTER와 INSERT·UPDATE·DELETE
각 목록에서 하나씩 선택합니다. BEFORE/AFTER는 트리거가 실행되는 시점을 결정하고, INSERT/UPDATE/DELETE는 트리거를 시작하게 만드는 이벤트를 의미합니다.
FOR EACH ROW vs FOR EACH STATEMENT
두 옵션의 차이는 트리거가 실행되는 횟수에 있습니다. FOR EACH ROW는 테이블에서 영향을 받는 각 행마다 트리거가 실행됩니다. 반면 FOR EACH STATEMENT는 실제로 갱신된 행이 있는지와 관계없이 최소 한 번은 반드시 실행됩니다.
트리거 삭제하기
데이터베이스나 테이블과 마찬가지로 트리거에도 DROP 옵션이 제공됩니다.
DROP TRIGGER [IF EXISTS] trigger_name;
IF EXISTS는 선택 사항입니다. 이 구문을 포함하면 "트리거가 존재하지 않습니다"라는 오류를 예방할 수 있습니다. 또한 테이블을 삭제하면 해당 테이블과 연관된 모든 트리거도 함께 자동으로 삭제됩니다.
트리거 작성의 핵심 요소 3가지
SQL 트리거를 작성하려면 다음 세 가지 핵심 요소가 필요합니다.
- 트리거의 이름과 이벤트 발생 시점을 지정하는 CREATE 문
- 트리거가 실행되는 빈도를 정하는 ROW/STATEMENT 옵션
- 실제 트리거 로직을 담는 BEGIN/END 블록
처음에는 잘 이해되지 않더라도 꾸준히 연습해 보세요. SQL 트리거는 고급 개념이기 때문에 다른 주제나 함수보다 더 많은 반복 학습이 필요할 수 있습니다.