여러 트리거의 실행 순서 조회하기
MySQL에서 동일한 이벤트(INSERT, UPDATE, DELETE 등)와 동일한 동작 시간(BEFORE 또는 AFTER)에 대해 여러 개의 트리거가 정의되어 있는 경우, 각 트리거가 실제로 실행되는 순서는 INFORMATION_SCHEMA.TRIGGERS 테이블의 ACTION_ORDER 컬럼을 통해 확인할 수 있습니다.
다음 쿼리를 사용하면 특정 데이터베이스에 생성된 트리거들의 이름과 실행 순서를 한눈에 파악할 수 있습니다.
mysql> SELECT trigger_name, action_order FROM INFORMATION_SCHEMA.triggers WHERE TRIGGER_SCHEMA = 'query' ORDER BY event_object_table, action_timing, event_manipulation;
+------------------------------+--------------+
| trigger_name | action_order |
+------------------------------+--------------+
| studentdetail_before_update | 1 |
| studentdetail_before_update2 | 2 |
+------------------------------+--------------+
2 rows in set (0.10 sec)
위 결과 집합은 'query' 데이터베이스에서 동일한 이벤트와 동작 시간에 생성된 두 개의 트리거가 실행되는 순서를 보여줍니다. 즉, UPDATE 이벤트 발생 시 studentdetail_before_update 트리거가 먼저 실행되고, 그 다음 studentdetail_before_update2 트리거가 실행됩니다.
쿼리 구성 요소 설명
TRIGGER_SCHEMA = 'query' 조건은 조회 대상을 'query'라는 이름의 데이터베이스(스키마)로 한정합니다. ORDER BY 절에 event_object_table(대상 테이블), action_timing(동작 시간), event_manipulation(이벤트 유형)을 지정하면 결과가 체계적으로 정렬되어 여러 테이블과 이벤트에 걸친 트리거도 쉽게 비교할 수 있습니다.
참고 사항
ACTION_ORDER 값은 1부터 시작하며, 숫자가 작을수록 먼저 실행됩니다. MySQL 5.7.2 버전부터 동일한 이벤트와 동작 시간에 대해 여러 트리거를 정의할 수 있게 되었으며, 트리거 생성 시 FOLLOWS 또는 PRECEDES 옵션을 사용해 실행 순서를 명시적으로 지정할 수도 있습니다.