Come si elencano tutti i trigger in un database MySQL?


100

Qual è il comando per elencare tutti i trigger in un database MySQL?

Risposte:


149

Il comando per elencare tutti i trigger è:

show triggers;

oppure puoi accedere alla INFORMATION_SCHEMAtabella direttamente da:

select trigger_schema, trigger_name, action_statement
from information_schema.triggers

2
Ti consiglio di utilizzare la query "SHOW TRIGGERS" invece di accedere direttamente a information_schema - quest'ultima sarà molto lenta una volta che avrai più di mille database sul server mentre "SHOW TRIGGERS" ha ancora prestazioni eccezionali.
Martin Tajur

Grazie per la seconda versione "complicata". Il primo non funziona (non conosco la resion) su uno degli host ...
utente il

3
Nota che SHOW TRIGGERSrichiede di avere i TRIGGERprivilegi per quel database e quella tabella. Se accedi a MySQL con un utente non privilegiato, l'esecuzione SHOW TRIGGERSnon restituirà nulla invece di generare un errore. Ciò può creare confusione se non si è a conoscenza dei requisiti di privilegio.
Christopher Schultz

14

Spero che il codice seguente ti fornisca maggiori informazioni.

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

Questo ti darà un totale di 22 colonne nella versione MySQL: 5.5.27 e sopra

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
Eviterei di usare LIKEquando si tratta di schema. Ho lavorato in ambienti in cui farlo in questo modo sarebbe soggetto a errori in cui un cliente aveva un database denominato "company" e un altro denominato "company_project". Suggerirei anche di usare le maiuscole per PAROLE CHIAVE per chiarezza e INFORMATION_SCHEMA e le colonne lì, quindi è chiaro che non hai a che fare con un DB normale.
AndrewWhalan

13

È possibile utilizzare di seguito per trovare una particolare definizione di trigger.

SHOW TRIGGERS LIKE '%trigger_name%'\G

o il seguente per mostrare tutti i trigger nel database. Funzionerà per MySQL 5.0 e versioni successive.

SHOW TRIGGERS\G

9

Per mostrare un particolare trigger in un particolare schema puoi provare quanto segue:

select * from information_schema.triggers where 
information_schema.triggers.trigger_name like '%trigger_name%' and 
information_schema.triggers.trigger_schema like '%data_base_name%'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.