Como você lista todos os gatilhos em um banco de dados MySQL?

100

Qual é o comando para listar todos os gatilhos em um banco de dados MySQL?

atormentar
fonte

Respostas:

149

O comando para listar todos os gatilhos é:

show triggers;

ou você pode acessar a INFORMATION_SCHEMAtabela diretamente por:

select trigger_schema, trigger_name, action_statement
from information_schema.triggers
atormentar
fonte
2
Eu recomendo usar a consulta "SHOW TRIGGERS" em vez de acessar information_schema diretamente - o último será muito lento, uma vez que você tenha mais de mil bancos de dados no servidor, enquanto "SHOW TRIGGERS" ainda tem um desempenho excelente.
Martin Tajur
Obrigado pela segunda versão "complicada" da fpr. O primeiro não funciona (não sei a resolução) em um dos hosts ...
userlond de
3
Observe que isso SHOW TRIGGERSrequer que você tenha o TRIGGERprivilégio para esse banco de dados e tabela. Se você efetuar login no MySQL com um usuário sem privilégios, a execução SHOW TRIGGERSnão retornará nada em vez de gerar um erro. Isso pode ser confuso se você não estiver ciente do requisito de privilégio.
Christopher Schultz
14

Espero que o código a seguir forneça mais informações.

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

Isso lhe dará um total de 22 colunas na versão do MySQL: 5.5.27 e acima

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
fonte
1
Eu evitaria usar LIKEao lidar com o esquema. Eu trabalhei em ambientes onde fazer dessa forma seria propenso a erros, onde um cliente tinha um banco de dados chamado "empresa" e outro chamado "empresa_projeto". Eu também sugeriria capitalizar KEYWORDS para maior clareza e INFORMATION_SCHEMA e as colunas lá para que fique claro que você não está lidando com um banco de dados normal.
AndrewWhalan
13

Você pode usar a seguir para encontrar uma definição de gatilho específica.

SHOW TRIGGERS LIKE '%trigger_name%'\G

ou o seguinte para mostrar todos os gatilhos no banco de dados. Funcionará no MySQL 5.0 e superior.

SHOW TRIGGERS\G
Kainda
fonte
9

Para mostrar um determinado gatilho em um determinado esquema, você pode tentar o seguinte:

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
fonte