MySQL에서 동일한 이벤트(예: INSERT)와 동일한 작업 시간(BEFORE 또는 AFTER)을 가진 여러 트리거를 생성하면, 기본적으로 MySQL은 트리거가 생성된 순서대로 트리거를 호출합니다.
하지만 MySQL 5.7.2 버전부터 도입된 다음 두 가지 옵션을 사용하면 이 실행 순서를 직접 제어할 수 있습니다.
FOLLOWS 옵션
이 옵션을 사용하면 새로 생성하는 트리거가 지정한 기존 트리거의 이후에 활성화됩니다. 즉, 기존 트리거가 먼저 실행된 뒤 새 트리거가 실행됩니다.
구문
FOR EACH ROW FOLLOWS trigger_name
PRECEDES 옵션
이 옵션을 사용하면 새로 생성하는 트리거가 지정한 기존 트리거의 이전에 활성화됩니다. 즉, 새 트리거가 먼저 실행된 뒤 기존 트리거가 실행됩니다.
구문
FOR EACH ROW PRECEDES trigger_name
사용 예시
다음과 같이 CREATE TRIGGER 문에 옵션을 추가하여 실행 순서를 지정할 수 있습니다.
CREATE TRIGGER trg_after_insert
AFTER INSERT ON employees
FOR EACH ROW FOLLOWS trg_existing_trigger
BEGIN
-- 트리거 본문
END;
이처럼 FOLLOWS와 PRECEDES 옵션을 활용하면 같은 이벤트에 연결된 여러 트리거 간의 의존 관계를 명확하게 정의할 수 있어, 로깅, 데이터 검증, 후속 처리 등의 작업을 원하는 순서대로 안정적으로 수행할 수 있습니다.