MySQL 트리거의 기본 개념
MySQL 트리거(Trigger)는 데이터베이스 카탈로그에 저장된 일련의 SQL 문장 집합입니다. 이 데이터베이스 객체는 항상 특정 테이블과 연결되어 있으며, 해당 테이블에서 지정된 이벤트가 발생하면 자동으로 활성화되도록 정의됩니다.
다른 관점에서 보면 MySQL 트리거는 일종의 특수한 저장 프로시저(Stored Procedure)라고 할 수 있습니다. 저장 프로시저와의 가장 큰 차이점은, 저장 프로시저처럼 직접 호출하는 것이 아니라 테이블에 대한 데이터 변경 이벤트가 발생했을 때 자동으로 실행된다는 점입니다.
트리거는 테이블에서 INSERT, UPDATE, DELETE 문 중 하나가 실행될 때 동작하며, 이벤트 발생 이전(BEFORE) 또는 이후(AFTER)에 호출되도록 설정할 수 있습니다. 트리거는 사용자가 그 존재조차 인식하지 못한 채 조용히 백그라운드에서 실행되며, 내부에 COMMIT이나 ROLLBACK 문을 포함할 수 없다는 점도 기억해야 합니다.
기본 트리거 생성 문법
CREATE TRIGGER 트리거_이름
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON 테이블_이름
FOR EACH ROW
BEGIN
-- 실행할 SQL 문장
END;MySQL 트리거링 이벤트의 종류
트리거링 이벤트(Triggering Event)란 트리거가 활성화되는 시점, 즉 어떤 데이터 변경 작업에 반응할지를 결정하는 요소입니다. MySQL 트리거와 관련된 트리거링 이벤트는 다음 세 가지입니다.
1. INSERT 이벤트
이름 그대로 MySQL 테이블에 새로운 데이터를 삽입하는 작업과 관련된 이벤트입니다. 이 경우 트리거는 데이터 삽입이 일어나기 전(BEFORE INSERT) 또는 후(AFTER INSERT)에 실행됩니다. 예를 들어, 신규 회원 등록 시 자동으로 로그를 기록하는 용도로 활용할 수 있습니다.
2. DELETE 이벤트
테이블에서 데이터를 삭제하는 작업과 관련된 이벤트입니다. 트리거는 데이터 삭제가 발생하기 전(BEFORE DELETE) 또는 후(AFTER DELETE)에 실행됩니다. 삭제된 데이터를 별도의 백업 테이블에 보관하는 등의 처리에 유용합니다.
3. UPDATE 이벤트
테이블의 기존 데이터를 수정하는 작업과 관련된 이벤트입니다. 트리거는 데이터 갱신이 발생하기 전(BEFORE UPDATE) 또는 후(AFTER UPDATE)에 실행됩니다. 변경 전후 값을 비교하여 감사(audit) 로그를 남기는 데 자주 사용됩니다.
정리
MySQL 트리거는 INSERT, UPDATE, DELETE라는 세 가지 데이터 변경 이벤트에 반응하여 BEFORE 또는 AFTER 시점에 자동 실행되는 강력한 데이터베이스 객체입니다. 데이터 무결성 유지, 자동 로깅, 파생 데이터 계산 등에 활용하면 애플리케이션 코드를 단순화하고 데이터 일관성을 높일 수 있습니다.