INFORMATION_SCHEMA.TRIGGERS 테이블이란?
MySQL에서는 information_schema.triggers 테이블을 조회하면 서버에 정의된 트리거의 메타데이터를 손쉽게 확인할 수 있습니다. 여기에 trigger_schema 조건을 추가하면 특정 데이터베이스(스키마)에 속한 트리거만 필터링하여 상세 정보를 얻을 수 있습니다.
조회 쿼리 작성 방법
아래와 같이 WHERE 절에서 LIKE 연산자를 사용해 원하는 데이터베이스 이름을 지정하면 됩니다.
mysql> SELECT * FROM information_schema.triggers
-> WHERE information_schema.triggers.trigger_schema LIKE '%query%'\G위 쿼리를 실행하면 해당 데이터베이스에 정의된 각 트리거별로 다음과 같은 상세 정보가 출력됩니다.
*************************** 1. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: query
TRIGGER_NAME: trigger_before_delete_sample
EVENT_MANIPULATION: DELETE
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: query
EVENT_OBJECT_TABLE: sample
ACTION_ORDER: 1
ACTION_CONDITION: NULL
ACTION_STATEMENT: BEGIN
SET @count = if (@count IS NULL, 1, (@count+1));
INSERT INTO sample_rowaffected values (@count);
END
ACTION_ORIENTATION: ROW
ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
ACTION_REFERENCE_OLD_ROW: OLD
ACTION_REFERENCE_NEW_ROW: NEW
CREATED: 2017-11-21 12:31:58.70
SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
DEFINER: root@localhost
CHARACTER_SET_CLIENT: cp850
COLLATION_CONNECTION: cp850_general_ci
DATABASE_COLLATION: latin1_swedish_ci
*************************** 2. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: query
TRIGGER_NAME: before_inser_studentage
EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: query
EVENT_OBJECT_TABLE: student_age
ACTION_ORDER: 1
ACTION_CONDITION: NULL
ACTION_STATEMENT: IF NEW.age < 0 THEN SET NEW.age = 0;
END IF
ACTION_ORIENTATION: ROW
ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
ACTION_REFERENCE_OLD_ROW: OLD
ACTION_REFERENCE_NEW_ROW: NEW
CREATED: 2017-11-21 11:26:15.34
SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
DEFINER: root@localhost
CHARACTER_SET_CLIENT: cp850
COLLATION_CONNECTION: cp850_general_ci
DATABASE_COLLATION: latin1_swedish_ci
2 rows in set (0.03 sec)주요 컬럼 설명
출력 결과에서 자주 사용되는 핵심 컬럼은 다음과 같습니다.
- TRIGGER_NAME: 트리거의 이름입니다.
- EVENT_MANIPULATION: 트리거가 실행되는 이벤트 유형(INSERT, UPDATE, DELETE)을 나타냅니다.
- EVENT_OBJECT_TABLE: 트리거가 걸려 있는 대상 테이블입니다.
- ACTION_TIMING: 이벤트 발생 시점(BEFORE 또는 AFTER)을 의미합니다.
- ACTION_STATEMENT: 트리거가 실제로 수행하는 SQL 문장입니다.
- DEFINER: 해당 트리거를 생성한 계정 정보입니다.
참고 사항
쿼리 끝에 붙인 \G 옵션은 결과를 세로 형태로 출력해 주는 기능으로, 컬럼이 많은 트리거 정보를 읽기 좋게 표시할 때 유용합니다. 또한 전체 컬럼 대신 필요한 컬럼만 선택하거나, SHOW TRIGGERS FROM 데이터베이스명; 구문을 사용하는 방법도 있습니다.