SHOW TRIGGERS 명령어로 트리거 목록 확인하기
MySQL 데이터베이스에 정의된 모든 트리거를 한눈에 확인하려면 SHOW TRIGGERS 명령어를 사용하는 것이 가장 간단한 방법입니다. 다음 쿼리를 실행해 보세요.
mysql> show triggers;
실행 결과는 아래와 같습니다. 트리거 이름(Trigger), 이벤트 유형(Event), 대상 테이블(Table), 실행 문장(Statement), 실행 시점(Timing), 생성 일시(Created), sql_mode, 정의자(Definer) 등 트리거와 관련된 상세 정보가 표 형태로 출력됩니다.
+----------------+--------+----------------------+--------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+
| Trigger | Event | Table | Statement | Timing | Created | sql_mode | Definer | character_set_client | collation_connection | Database Collation |
+----------------+--------+----------------------+--------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+
| binsertTrigger | INSERT | functiontriggersdemo | SET new.Id = uuid() | BEFORE | 2018-10-16 13:36:09.86 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | root@% | cp850 | cp850_general_ci | utf8mb4_unicode_ci |
| Table1Trigger | INSERT | table1 | begin insert into Table2(id, name) values (new.id, new.name); end | AFTER | 2018-10-23 10:51:31.76 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | root@% | cp850 | cp850_general_ci | utf8mb4_unicode_ci |
| insertBef | INSERT | tblfunctiontrigger | SET new.id = uuid() | BEFORE | 2018-10-16 13:44:10.93 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | root@% | cp850 | cp850_general_ci | utf8mb4_unicode_ci |
+----------------+--------+----------------------+--------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+
3 rows in set (0.13 sec)
information_schema를 활용한 트리거 조회
보다 체계적으로 트리거 정보를 조회하고 싶다면 information_schema 데이터베이스의 triggers 테이블을 활용할 수 있습니다. 필요한 컬럼만 선택해 조회할 수 있기 때문에, 원하는 정보만 깔끔하게 추출할 수 있다는 장점이 있습니다.
mysql> select trigger_schema, trigger_name, action_statement
-> from information_schema.triggers;
실행 결과는 다음과 같습니다. 스키마(sys, business 등)별로 어떤 트리거가 존재하는지, 그리고 각 트리거가 실제로 수행하는 SQL 문장(ACTION_STATEMENT)까지 함께 확인할 수 있습니다.
+----------------+----------------------------+-------------------------------------------------------------------------------------------------------------------+
| TRIGGER_SCHEMA | TRIGGER_NAME | ACTION_STATEMENT |
+----------------+----------------------------+-------------------------------------------------------------------------------------------------------------------+
| sys | sys_config_insert_set_user | BEGIN IF @sys.ignore_sys_config_triggers != true AND NEW.set_by IS NULL THEN SET NEW.set_by = USER(); END IF; END |
| sys | sys_config_update_set_user | BEGIN IF @sys.ignore_sys_config_triggers != true AND NEW.set_by IS NULL THEN SET NEW.set_by = USER(); END IF; END |
| business | binsertTrigger | SET new.Id = uuid() |
| business | insertBef | SET new.id = uuid() |
| business | Table1Trigger | begin insert into Table2(id, name) values (new.id, new.name); end |
+----------------+----------------------------+-------------------------------------------------------------------------------------------------------------------+
5 rows in set (0.00 sec)
참고 사항
참고: information_schema.triggers 테이블은 MySQL 5.0.10 이상 버전부터 지원됩니다. 본 예제는 MySQL 8.0.12 버전 환경에서 테스트되었습니다. 두 가지 방법 중 상황에 맞는 방식을 선택하면 되는데, 빠르게 전체 현황을 보려면 SHOW TRIGGERS, 특정 컬럼만 골라 조회하거나 조건 검색이 필요하면 information_schema.triggers를 사용하는 것이 좋습니다.