Wie listet man alle Trigger in einer MySQL-Datenbank auf?


99

Was ist der Befehl, um alle Trigger in einer MySQL-Datenbank aufzulisten?

Antworten:


148

Der Befehl zum Auflisten aller Trigger lautet:

show triggers;

oder Sie können INFORMATION_SCHEMAdirekt auf die Tabelle zugreifen, indem Sie:

select trigger_schema, trigger_name, action_statement
from information_schema.triggers

2
Ich würde empfehlen, die Abfrage "SHOW TRIGGERS" zu verwenden, anstatt direkt auf information_schema zuzugreifen. Letzteres ist sehr langsam, wenn Sie mehr als tausend Datenbanken auf dem Server haben, während "SHOW TRIGGERS" immer noch eine hervorragende Leistung aufweist.
Martin Tajur

Vielen Dank für die zweite "komplizierte" Version. Der erste funktioniert nicht (kennt die Resion nicht) auf einem der Hosts ...
Userlond

3
Beachten Sie, SHOW TRIGGERSdass Sie über die TRIGGERBerechtigung für diese Datenbank und Tabelle verfügen müssen . Wenn Sie sich mit einem nicht privilegierten Benutzer bei MySQL anmelden, gibt die Ausführung SHOW TRIGGERSnichts zurück, anstatt einen Fehler auszulösen. Dies kann verwirrend sein, wenn Sie die Berechtigungsanforderungen nicht kennen.
Christopher Schultz

14

Ich hoffe, der folgende Code gibt Ihnen weitere Informationen.

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

Dies gibt Ihnen insgesamt 22 Spalten in MySQL-Version: 5.5.27 und höher

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
Ich würde es vermeiden, LIKEwenn ich mich mit Schema beschäftige. Ich habe in Umgebungen gearbeitet, in denen dies fehleranfällig wäre, wenn ein Client eine Datenbank mit dem Namen "company" und eine andere mit dem Namen "company_project" hätte. Ich würde auch vorschlagen, KEYWORDS für Klarheit und INFORMATION_SCHEMA und die dortigen Spalten groß zu schreiben, damit klar ist, dass Sie es nicht mit einer regulären Datenbank zu tun haben.
AndrewWhalan

13

Sie können unten verwenden, um eine bestimmte Triggerdefinition zu finden.

SHOW TRIGGERS LIKE '%trigger_name%'\G

oder unten, um alle Trigger in der Datenbank anzuzeigen. Es funktioniert für MySQL 5.0 und höher.

SHOW TRIGGERS\G

9

Um einen bestimmten Trigger in einem bestimmten Schema anzuzeigen, können Sie Folgendes versuchen:

select * from information_schema.triggers where 
information_schema.triggers.trigger_name like '%trigger_name%' and 
information_schema.triggers.trigger_schema like '%data_base_name%'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.