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

MySQL에서 모든 트리거와 현재 데이터베이스의 트리거만 조회하는 방법

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; 실행