¿Cómo se enumeran todos los disparadores en una base de datos MySQL?

100

¿Cuál es el comando para listar todos los disparadores en una base de datos MySQL?

Harry
fuente

Respuestas:

149

El comando para listar todos los disparadores es:

show triggers;

o puede acceder a la INFORMATION_SCHEMAtabla directamente mediante:

select trigger_schema, trigger_name, action_statement
from information_schema.triggers
Harry
fuente
2
Recomendaría utilizar la consulta "SHOW TRIGGERS" en lugar de acceder a information_schema directamente; este último será muy lento una vez que tenga más de mil bases de datos en el servidor, mientras que "SHOW TRIGGERS" todavía tiene un rendimiento sobresaliente.
Martin Tajur
Gracias fpr segunda versión "complicada". El primero no funciona (no sé la resolución) en uno de los hosts ...
userlond
3
Tenga en cuenta que SHOW TRIGGERSrequiere que tenga TRIGGERprivilegios para esa base de datos y esa tabla. Si inicia sesión en MySQL con un usuario sin privilegios, la ejecución SHOW TRIGGERSno devolverá nada en lugar de arrojar un error. Eso puede resultar confuso si no conoce el requisito de privilegios.
Christopher Schultz
14

Espero que el siguiente código le brinde más información.

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

Esto le dará un total de 22 columnas en la versión de MySQL: 5.5.27 y superior

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
fuente
1
Evitaría usar LIKEcuando se trata de esquemas. He trabajado en entornos donde hacerlo de esa manera sería propenso a errores donde un cliente tenía una base de datos llamada "empresa" y otra llamada "empresa_proyecto". También sugeriría poner en mayúscula KEYWORDS para mayor claridad e INFORMATION_SCHEMA y las columnas allí para que quede claro que no se trata de una base de datos normal.
AndrewWhalan
13

Puede utilizar a continuación para encontrar una definición de disparador particular.

SHOW TRIGGERS LIKE '%trigger_name%'\G

o el siguiente para mostrar todos los disparadores en la base de datos. Funcionará para MySQL 5.0 y superior.

SHOW TRIGGERS\G
Kainda
fuente
9

Para mostrar un disparador en particular en un esquema en particular, puede intentar lo siguiente:

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
fuente