Jak wyświetlić listę wszystkich wyzwalaczy w bazie danych MySQL?

100

Jakie polecenie wyświetla listę wszystkich wyzwalaczy w bazie danych MySQL?

Złupić
źródło

Odpowiedzi:

151

Polecenie do wyświetlenia wszystkich wyzwalaczy to:

show triggers;

lub możesz uzyskać INFORMATION_SCHEMAbezpośredni dostęp do tabeli:

select trigger_schema, trigger_name, action_statement
from information_schema.triggers
Złupić
źródło
2
Zalecałbym skorzystanie z zapytania „SHOW TRIGGERS” zamiast bezpośredniego dostępu do information_schema - to drugie będzie bardzo powolne, gdy będziesz mieć więcej niż tysiąc baz danych na serwerze, podczas gdy „SHOW TRIGGERS” nadal ma znakomitą wydajność.
Martin Tajur,
Dzięki za drugą "skomplikowaną" wersję. Pierwszy nie działa (nie wiem co) na jednym z hostów ...
userlond
4
Zauważ, że SHOW TRIGGERSwymaga to posiadania TRIGGERuprawnień do tej bazy danych i tabeli. Jeśli logujesz się do MySQL z nieuprzywilejowanym użytkownikiem, wykonanie SHOW TRIGGERSnic nie zwróci zamiast zgłosić błąd. Może to być mylące, jeśli nie jesteś świadomy wymagań dotyczących uprawnień.
Christopher Schultz
14

Mam nadzieję, że poniższy kod dostarczy Ci więcej informacji.

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

To daje łącznie 22 kolumny w wersji MySQL: 5.5.27 i wyżej

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
Pragnesh Karia
źródło
1
Unikałbym używania w LIKEprzypadku schematu. Pracowałem w środowiskach, w których zrobienie tego w ten sposób byłoby podatne na błędy, w których klient miał bazę danych o nazwie „firma”, a inna o nazwie „firma_project”. Sugerowałbym również pisanie wielkimi literami KEYWORDS dla jasności i INFORMATION_SCHEMA oraz znajdujących się tam kolumn, aby było jasne, że nie masz do czynienia ze zwykłą bazą danych.
AndrewWhalan,
13

Możesz użyć poniżej, aby znaleźć konkretną definicję wyzwalacza.

SHOW TRIGGERS LIKE '%trigger_name%'\G

lub poniżej, aby pokazać wszystkie wyzwalacze w bazie danych. Będzie działać z MySQL 5.0 i nowszymi wersjami.

SHOW TRIGGERS\G
Kainda
źródło
9

Aby pokazać konkretny wyzwalacz w określonym schemacie, możesz spróbować wykonać następujące czynności:

select * from information_schema.triggers where 
information_schema.triggers.trigger_name like '%trigger_name%' and 
information_schema.triggers.trigger_schema like '%data_base_name%'
sunil
źródło