MySQL에서 트리거(trigger)의 메타데이터를 확인하고 싶다면 INFORMATION_SCHEMA 데이터베이스를 활용하면 됩니다. INFORMATION_SCHEMA는 MySQL 서버 내부에 존재하는 가상 데이터베이스로, 데이터베이스·테이블·컬럼·트리거 등 서버의 모든 객체 정보를 담고 있어 별도의 도구 설치 없이 간단한 SELECT 문만으로 정보를 조회할 수 있습니다.
트리거 메타데이터 조회 쿼리
아래 문장을 실행하면 현재 서버에 정의된 모든 트리거의 메타데이터를 확인할 수 있습니다.
mysql> Select trigger_schema, trigger_name, action_statement
-> from information_schema.triggers\G
*************************** 1. row ***************************
trigger_schema: query
trigger_name: trigger_before_delete_sample
action_statement: BEGIN
SET @count = if (@count IS NULL, 1, (@count+1));
INSERT INTO sample_rowaffected values (@count);
END
*************************** 2. row ***************************
trigger_schema: query
trigger_name: before_inser_studentage
action_statement: IF NEW.age < 0 THEN SET NEW.age = 0;
END IF
*************************** 3. row ***************************
trigger_schema: sys
trigger_name: sys_config_insert_set_user
action_statement: BEGIN IF @sys.ignore_sys_config_triggers != true AND
NEW.set_by IS NULL THEN SET NEW.set_by = USER(); END IF; END
*************************** 4. row ***************************
trigger_schema: sys
trigger_name: sys_config_update_set_user
action_statement: BEGIN IF @sys.ignore_sys_config_triggers != true AND
NEW.set_by IS NULL THEN SET NEW.set_by = USER(); END IF; END
4 rows in set (0.03 sec)주요 컬럼 설명
위 쿼리 결과에서 자주 사용되는 핵심 컬럼은 다음과 같습니다.
- trigger_schema: 해당 트리거가 속해 있는 데이터베이스(스키마)의 이름입니다.
- trigger_name: 트리거의 고유 이름입니다.
- action_statement: 트리거가 발동되었을 때 실제로 실행되는 SQL 문입니다.
예제 결과를 보면 'query' 스키마에는 사용자가 직접 생성한 두 개의 트리거가, 'sys' 스키마에는 MySQL 시스템에서 기본 제공하는 트리거들이 포함되어 있는 것을 확인할 수 있습니다.
특정 데이터베이스의 트리거만 조회하기
서버 전체가 아닌 특정 데이터베이스의 트리거만 보고 싶다면 WHERE 절을 추가하면 됩니다.
SELECT trigger_schema, trigger_name, action_statement FROM information_schema.triggers WHERE trigger_schema = '데이터베이스명';
또한 SHOW TRIGGERS 명령으로도 비슷한 정보를 얻을 수 있지만, INFORMATION_SCHEMA를 사용하면 원하는 컬럼만 선택하거나 조건 필터링, 다른 테이블과의 조인 등 더 유연한 조회가 가능하다는 장점이 있습니다.