Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 동일한 이벤트와 동작 시간을 가진 여러 트리거의 실행 순서 확인 방법

여러 트리거의 실행 순서 조회하기

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 옵션을 사용해 실행 순서를 명시적으로 지정할 수도 있습니다.