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

MySQL 데이터베이스에서 모든 트리거 목록을 확인하는 방법

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를 사용하는 것이 좋습니다.