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

Posted

技术标签:

【中文标题】如何列出 MySQL 数据库中的所有触发器?【英文标题】:How do you list all triggers in a MySQL database? 【发布时间】:2010-09-08 00:32:39 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

show triggers;

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

select trigger_schema, trigger_name, action_statement
from information_schema.triggers
您可以从 5.0.10 版本开始执行此操作。 更多关于TRIGGERS table is here的信息。

【讨论】:

我建议使用“SHOW TRIGGERS”查询而不是直接访问 information_schema - 一旦服务器上有超过一千个数据库而“SHOW TRIGGERS”仍然有,后者会非常慢出色的表现。 感谢 fpr 第二个“复杂”版本。第一个在其中一个主机上不起作用(不知道 resion)... 请注意,SHOW TRIGGERS 要求您拥有该数据库和表的 TRIGGER 权限。如果您使用非特权用户登录 MySQL,则执行 SHOW TRIGGERS 将不会返回任何内容而不是抛出错误。如果您不了解权限要求,这可能会让人感到困惑。【参考方案2】:

希望下面的代码能给你更多的信息。

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

【讨论】:

在处理模式时我会避免使用LIKE。我曾在这样的环境中工作过,如果客户有一个名为“company”的数据库和另一个名为“company_project”的数据库,那么这样做很容易出错。为了清楚起见,我还建议大写 KEYWORDS 和 INFORMATION_SCHEMA 以及那里的列,这样很明显你不是在处理常规数据库。【参考方案3】:

您可以使用下面找到特定的触发器定义。

SHOW TRIGGERS LIKE '%trigger_name%'\G

或以下显示数据库中的所有触发器。它适用于 MySQL 5.0 及更高版本。

SHOW TRIGGERS\G

【讨论】:

【参考方案4】:

要在特定架构中显示特定触发器,您可以尝试以下操作:

select * from information_schema.triggers where 
information_schema.triggers.trigger_name like '%trigger_name%' and 
information_schema.triggers.trigger_schema like '%data_base_name%'

【讨论】:

【参考方案5】:

您可以使用 MySQL Workbench: 连接到 MySQL 服务器 选择数据库

表格 在表格名称行点击编辑图标(看起来像一个工作工具) 在表格编辑窗口中 - 单击“触发器”选项卡 在触发器列表中单击 eTrigger 名称以获取其源代码

【讨论】:

【参考方案6】:

这句话可能有助于解决问题:

select LOWER(concat('delimiter |', '\n', 'create trigger %data_base_name%.', TRIGGER_NAME, '\n', 
'    ', ACTION_TIMING, ' ', EVENT_MANIPULATION, ' on %data_base_name%.', EVENT_OBJECT_TABLE, ' for each row', '\n',
ACTION_STATEMENT, '\n',
'|')) AS TablaTriggers from information_schema.triggers where 
information_schema.triggers.trigger_schema like '%data_base_name%'

【讨论】:

以上是关于如何列出 MySQL 数据库中的所有触发器?的主要内容,如果未能解决你的问题,请参考以下文章

sql 列出TABLE中的所有触发器

mysql如何查看表中的所有约束和触发器?

如何查看MySQL执行计划呢?

如何访问 MySQL 触发器中的“INSERTED”值?

MySQL如何创建一个触发器,功能是在一张表中insert一条数据,另一张表中的数据相应地进行update。

mysql中的索引触发器和事务