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

MySQL INFORMATION_SCHEMA로 특정 데이터베이스의 트리거 상세 정보 조회하기

INFORMATION_SCHEMA.TRIGGERS 테이블이란?

MySQL에서는 information_schema.triggers 테이블을 조회하면 서버에 정의된 트리거의 메타데이터를 손쉽게 확인할 수 있습니다. 여기에 trigger_schema 조건을 추가하면 특정 데이터베이스(스키마)에 속한 트리거만 필터링하여 상세 정보를 얻을 수 있습니다.

조회 쿼리 작성 방법

아래와 같이 WHERE 절에서 LIKE 연산자를 사용해 원하는 데이터베이스 이름을 지정하면 됩니다.

mysql> SELECT * FROM information_schema.triggers
    -> WHERE information_schema.triggers.trigger_schema LIKE '%query%'\G

위 쿼리를 실행하면 해당 데이터베이스에 정의된 각 트리거별로 다음과 같은 상세 정보가 출력됩니다.

*************************** 1. row ***************************
           TRIGGER_CATALOG: def
            TRIGGER_SCHEMA: query
              TRIGGER_NAME: trigger_before_delete_sample
        EVENT_MANIPULATION: DELETE
      EVENT_OBJECT_CATALOG: def
       EVENT_OBJECT_SCHEMA: query
        EVENT_OBJECT_TABLE: sample
              ACTION_ORDER: 1
          ACTION_CONDITION: NULL
          ACTION_STATEMENT: BEGIN
SET @count = if (@count IS NULL, 1, (@count+1));
INSERT INTO sample_rowaffected values (@count);
END
        ACTION_ORIENTATION: ROW
             ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
  ACTION_REFERENCE_OLD_ROW: OLD
  ACTION_REFERENCE_NEW_ROW: NEW
                   CREATED: 2017-11-21 12:31:58.70
                  SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
                  DEFINER: root@localhost
      CHARACTER_SET_CLIENT: cp850
      COLLATION_CONNECTION: cp850_general_ci
        DATABASE_COLLATION: latin1_swedish_ci
*************************** 2. row ***************************
           TRIGGER_CATALOG: def
            TRIGGER_SCHEMA: query
              TRIGGER_NAME: before_inser_studentage
        EVENT_MANIPULATION: INSERT
      EVENT_OBJECT_CATALOG: def
       EVENT_OBJECT_SCHEMA: query
        EVENT_OBJECT_TABLE: student_age
              ACTION_ORDER: 1
          ACTION_CONDITION: NULL
          ACTION_STATEMENT: IF NEW.age < 0 THEN SET NEW.age = 0;
END IF
        ACTION_ORIENTATION: ROW
             ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
  ACTION_REFERENCE_OLD_ROW: OLD
  ACTION_REFERENCE_NEW_ROW: NEW
                   CREATED: 2017-11-21 11:26:15.34
                  SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
                  DEFINER: root@localhost
      CHARACTER_SET_CLIENT: cp850
      COLLATION_CONNECTION: cp850_general_ci
        DATABASE_COLLATION: latin1_swedish_ci

2 rows in set (0.03 sec)

주요 컬럼 설명

출력 결과에서 자주 사용되는 핵심 컬럼은 다음과 같습니다.

  • TRIGGER_NAME: 트리거의 이름입니다.
  • EVENT_MANIPULATION: 트리거가 실행되는 이벤트 유형(INSERT, UPDATE, DELETE)을 나타냅니다.
  • EVENT_OBJECT_TABLE: 트리거가 걸려 있는 대상 테이블입니다.
  • ACTION_TIMING: 이벤트 발생 시점(BEFORE 또는 AFTER)을 의미합니다.
  • ACTION_STATEMENT: 트리거가 실제로 수행하는 SQL 문장입니다.
  • DEFINER: 해당 트리거를 생성한 계정 정보입니다.

참고 사항

쿼리 끝에 붙인 \G 옵션은 결과를 세로 형태로 출력해 주는 기능으로, 컬럼이 많은 트리거 정보를 읽기 좋게 표시할 때 유용합니다. 또한 전체 컬럼 대신 필요한 컬럼만 선택하거나, SHOW TRIGGERS FROM 데이터베이스명; 구문을 사용하는 방법도 있습니다.