如何列出MySQL数据库中的所有触发器?


100

列出MySQL数据库中所有触发器的命令是什么?

Answers:


149

列出所有触发器的命令是:

show triggers;

或者您可以通过以下方式INFORMATION_SCHEMA直接访问该表:

select trigger_schema, trigger_name, action_statement
from information_schema.triggers

2
我建议继续使用“ SHOW TRIGGERS”查询,而不是直接访问information_schema-一旦服务器上有数千个数据库,后者就会非常慢,而“ SHOW TRIGGERS”仍然具有出色的性能。
Martin Tajur 2011年

感谢fpr第二个“复杂”版本。第一个在其中一个主机上不起作用(不知道版本)
2015年

3
请注意,这SHOW TRIGGERS要求您具有该TRIGGER数据库和表的特权。如果您以非特权用户身份登录到MySQL,则执行SHOW TRIGGERS将不返回任何内容,而将引发错误。如果您不知道特权要求,可能会造成混淆。
Christopher Schultz

14

希望以下代码能为您提供更多信息。

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

这将使您在MySQL版本:5.5.27更高版本中总共有22列

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%'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.