INFORMATION_SCHEMA.TRIGGERS로 테이블의 트리거 조회하기
MySQL에서는 INFORMATION_SCHEMA.TRIGGERS 테이블을 조회하면 특정 데이터베이스와 테이블에 연결된 모든 트리거 정보를 한 번에 확인할 수 있습니다. 아래 쿼리처럼 TRIGGER_SCHEMA에는 데이터베이스 이름을, EVENT_OBJECT_TABLE에는 테이블 이름을 조건으로 지정하면 됩니다.
mysql> Select * from INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA = 'query' AND EVENT_OBJECT_TABLE = 'Student_info'\G
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
*************************** 1. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: query
TRIGGER_NAME: studentinfo_after_delete
EVENT_MANIPULATION: DELETE
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: query
EVENT_OBJECT_TABLE: student_info
ACTION_ORDER: 1
ACTION_CONDITION: NULL
ACTION_STATEMENT: BEGIN
DECLARE vuser varchar(30);
SELECT USER() into vuser;
INSERT INTO student_info_deleted(id,deleted_date,deleted_by) VALUES(OLD.id,SYSDATE(),vuser);
END
ACTION_ORIENTATION: ROW
ACTION_TIMING: AFTER
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
ACTION_REFERENCE_OLD_ROW: OLD
ACTION_REFERENCE_NEW_ROW: NEW
CREATED: 2017-11-21 14:19:34.91
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
1 row in set (0.00 sec)결과 해석
위 결과 집합은 'query'라는 데이터베이스의 'student_info' 테이블에 등록된 트리거 목록을 보여줍니다. 주요 항목은 다음과 같습니다.
- TRIGGER_NAME: 트리거의 이름으로, 이 예제에서는 'studentinfo_after_delete'입니다.
- EVENT_MANIPULATION: 트리거가 실행되는 이벤트 유형으로, 여기서는 DELETE입니다.
- ACTION_TIMING: 이벤트 발생 시점(AFTER/BEFORE)을 나타냅니다.
- ACTION_STATEMENT: 트리거가 실행될 때 수행되는 실제 SQL 문장입니다. 이 예제에서는 삭제된 행의 정보와 사용자, 날짜를 별도의 로그 테이블에 기록하는 로직입니다.
- DEFINER: 해당 트리거를 생성한 계정 정보입니다.
참고: SHOW TRIGGERS 명령 활용하기
INFORMATION_SCHEMA 조회 외에도 간단하게 트리거 목록을 확인하고 싶다면 SHOW TRIGGERS FROM 데이터베이스명 LIKE '테이블명'; 형태의 명령을 사용할 수 있습니다. 단, 세부 메타데이터까지 자세히 보려면 INFORMATION_SCHEMA.TRIGGERS를 조회하는 방법이 더 유용합니다.