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.