Как вы перечисляете все триггеры в базе данных MySQL?


100

Какая команда выводит список всех триггеров в базе данных MySQL?

Ответы:


151

Команда для вывода списка всех триггеров:

show triggers;

или вы можете получить доступ к INFORMATION_SCHEMAтаблице напрямую:

select trigger_schema, trigger_name, action_statement
from information_schema.triggers

2
Я бы рекомендовал использовать запрос «SHOW TRIGGERS» вместо прямого доступа к information_schema - последний будет очень медленным, если у вас будет более тысячи баз данных на сервере, в то время как «SHOW TRIGGERS» по-прежнему имеет выдающуюся производительность.
Мартин Таджур

Спасибо за вторую "сложную" версию. Первый не работает (не знаю причину) на одном из хостов ...
userlond

4
Обратите внимание, что для этого SHOW TRIGGERSтребуется, чтобы у вас были TRIGGERправа доступа к этой базе данных и таблице. Если вы войдете в MySQL с непривилегированным пользователем, выполнение SHOW TRIGGERSничего не вернет, а не выдаст ошибку. Это может сбивать с толку, если вы не знаете о требованиях привилегий.
Christopher Schultz

14

Я надеюсь, что следующий код даст вам больше информации.

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

Это даст вам всего 22 столбца в версии MySQL: 5.5.27 и выше.

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
Я бы избегал использования LIKEпри работе со схемой. Я работал в средах, где это было бы подвержено ошибкам, когда у клиента была база данных с именем «company», а другая - с именем «company_project». Я также предлагаю использовать KEYWORDS с заглавной буквы для ясности, а INFORMATION_SCHEMA и столбцы там, чтобы было ясно, что вы имеете дело не с обычной БД.
AndrewWhalan

13

Вы можете использовать ниже, чтобы найти конкретное определение триггера.

SHOW TRIGGERS LIKE '%trigger_name%'\G

или ниже, чтобы показать все триггеры в базе данных. Он будет работать с MySQL 5.0 и выше.

SHOW TRIGGERS\G

9

Для отображения конкретного триггера в конкретной схеме вы можете попробовать следующее:

select * from information_schema.triggers where 
information_schema.triggers.trigger_name like '%trigger_name%' and 
information_schema.triggers.trigger_schema like '%data_base_name%'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.