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

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

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

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

    show triggers;
    

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

    select trigger_schema, trigger_name, action_statement
    from information_schema.triggers
    

    【讨论】:

    • 我建议使用“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%'
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-07-22
            • 1970-01-01
            • 2017-05-05
            • 2022-08-03
            • 2023-03-19
            • 2016-02-16
            • 1970-01-01
            相关资源
            最近更新 更多