MySQL 전체 트리거 조회하기
MySQL 서버에 존재하는 모든 트리거(trigger)를 한 번에 확인하려면 information_schema.triggers 테이블을 조회하면 됩니다. 기본 문법은 다음과 같습니다.
select trigger_schema, trigger_name from information_schema.triggers;
이 쿼리는 트리거가 속한 스키마(데이터베이스) 이름과 트리거 이름을 함께 반환합니다. 실제로 실행해 보겠습니다.
mysql> select trigger_schema, trigger_name from information_schema.triggers;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+----------------+---------------------------------+ | TRIGGER_SCHEMA | TRIGGER_NAME | +----------------+---------------------------------+ | sys | sys_config_insert_set_user | | sys | sys_config_update_set_user | | business | binsertTrigger | | business | insertBef | | business | Table1Trigger | | test | insertingTrigger | | sample | InsertPrevent_TriggerDemo | | sample | InsertPreventTrigger | | sample | before_Client_insert | | sample | enforce_phone_check | | sample | default_current_year | | sample | restrictUpdateDemo | | web | lowerCaseOnInsertDemo | | web | preventing_to_insert_zero_value | +----------------+---------------------------------+ 14 rows in set (0.00 sec)
결과를 보면 sys, business, test, sample, web 등 여러 데이터베이스에 걸쳐 총 14개의 트리거가 존재하는 것을 확인할 수 있습니다. 이처럼 information_schema.triggers를 조회하면 서버 전체의 트리거 정보를 한눈에 파악할 수 있습니다.
현재 데이터베이스의 트리거만 조회하기
서버 전체가 아니라 현재 작업 중인 데이터베이스에 속한 트리거만 확인하고 싶다면, 먼저 USE 명령으로 해당 데이터베이스에 접속한 뒤 SHOW TRIGGERS 명령어를 실행하면 됩니다.
예를 들어 현재 데이터베이스가 "web"인 경우 다음과 같이 실행합니다.
mysql> use web; Database changed mysql> show triggers;
실행 결과는 다음과 같습니다.
+---------------------------------+--------+--------------+-----------------------------------------------------------------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+ | Trigger | Event | Table | Statement | Timing | Created | sql_mode | Definer | character_set_client | collation_connection | Database Collation | +---------------------------------+--------+--------------+-----------------------------------------------------------------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+ | lowerCaseOnInsertDemo | INSERT | demotable222 | SET NEW.StudentSubject = LOWER(NEW.StudentSubject) | BEFORE | 2019-06-01 15:53:09.29 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | root@% | utf8 | utf8_general_ci | utf8_unicode_ci | | preventing_to_insert_zero_value | INSERT | DemoTable | begin if(new.Value = 0) then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You can not provide 0 value'; END if; end | BEFORE | 2019-07-07 18:03:41.65 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | root@% | utf8 | utf8_general_ci | utf8_unicode_ci | +---------------------------------+--------+--------------+-----------------------------------------------------------------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+ 2 rows in set (0.00 sec)
SHOW TRIGGERS는 단순히 트리거 이름뿐만 아니라 이벤트 유형(Event), 적용 대상 테이블(Table), 트리거 본문(Statement), 실행 시점(Timing), 생성 일시(Created) 등 상세 정보까지 함께 보여주기 때문에, 특정 데이터베이스의 트리거를 관리할 때 매우 유용합니다.
정리
- 모든 트리거 조회:
SELECT trigger_schema, trigger_name FROM information_schema.triggers; - 현재 데이터베이스의 트리거 조회: 데이터베이스 선택(
USE db명) 후SHOW TRIGGERS;실행