如何列出 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 数据库中的所有触发器?的主要内容,如果未能解决你的问题,请参考以下文章