MySQL 데이터베이스의 모든 트리거를 어떻게 나열합니까?


100

MySQL 데이터베이스의 모든 트리거를 나열하는 명령은 무엇입니까?

답변:


149

모든 트리거를 나열하는 명령은 다음과 같습니다.

show triggers;

또는 다음을 통해 INFORMATION_SCHEMA테이블에 직접 액세스 할 수 있습니다 .

select trigger_schema, trigger_name, action_statement
from information_schema.triggers

2
information_schema에 직접 액세스하는 대신 "SHOW TRIGGERS"쿼리를 사용하는 것이 좋습니다. "SHOW TRIGGERS"는 여전히 뛰어난 성능을 유지하면서 서버에 데이터베이스가 천 개 이상 있으면 후자는 매우 느려집니다.
Martin Tajur

감사합니다 fpr 두 번째 "복잡한"버전. 첫 번째는 호스트 중 하나에서 작동하지 않습니다 (반대를 모릅니다) ...
userlond

3
SHOW TRIGGERS당신이 있어야 TRIGGER해당 데이터베이스 및 테이블에 대한 권한을. 권한이없는 사용자로 MySQL에 로그인하면 실행 SHOW TRIGGERS하면 오류가 발생하는 대신 아무것도 반환되지 않습니다. 권한 요구 사항을 모르면 혼란 스러울 수 있습니다.
Christopher Schultz

14

다음 코드가 더 많은 정보를 제공하기를 바랍니다.

select * from information_schema.triggers where 
information_schema.triggers.trigger_schema like '%your_db_name%'

그러면 MySQL 버전 에서 총 22 개의 열이 제공됩니다 : 5.5.27 이상

TRIGGER_CATALOG 
TRIGGER_SCHEMA
TRIGGER_NAME
EVENT_MANIPULATION
EVENT_OBJECT_CATALOG
EVENT_OBJECT_SCHEMA 
EVENT_OBJECT_TABLE
ACTION_ORDER
ACTION_CONDITION
ACTION_STATEMENT
ACTION_ORIENTATION
ACTION_TIMING
ACTION_REFERENCE_OLD_TABLE
ACTION_REFERENCE_NEW_TABLE
ACTION_REFERENCE_OLD_ROW
ACTION_REFERENCE_NEW_ROW
CREATED 
SQL_MODE
DEFINER 
CHARACTER_SET_CLIENT
COLLATION_CONNECTION
DATABASE_COLLATION

1
LIKE스키마를 다룰 때 사용하지 않을 것 입니다. 클라이언트가 "company"라는 데이터베이스와 "company_project"라는 다른 데이터베이스가있는 경우 오류가 발생하기 쉬운 환경에서 작업했습니다. 또한 명확성을 위해 KEYWORDS와 INFORMATION_SCHEMA 및 열을 대문자로 사용하여 일반 DB를 다루지 않는 것이 분명합니다.
AndrewWhalan

13

아래에서 특정 트리거 정의를 찾을 수 있습니다.

SHOW TRIGGERS LIKE '%trigger_name%'\G

또는 아래에서 데이터베이스의 모든 트리거를 표시합니다. MySQL 5.0 이상에서 작동합니다.

SHOW TRIGGERS\G

9

특정 스키마에서 특정 트리거를 표시하려면 다음을 시도 할 수 있습니다.

select * from information_schema.triggers where 
information_schema.triggers.trigger_name like '%trigger_name%' and 
information_schema.triggers.trigger_schema like '%data_base_name%'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.