加入收藏 | 设为首页 | 会员中心 | 我要投稿 草根网 (https://www.1asp.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

MySQL触发器管理

发布时间:2022-11-25 12:55:58 所属栏目:教程 来源:
导读:  在本教程中,您将学习如何管理触发器,包括在MySQL数据库中显示,修改和删除触发器。

  创建触发器后,可以在包含触发器定义文件的数据文件夹中显示其定义。触发器作为纯文本文件存储在以下数据库文件夹中
  在本教程中,您将学习如何管理触发器,包括在MySQL数据库中显示,修改和删除触发器。
 
  创建触发器后,可以在包含触发器定义文件的数据文件夹中显示其定义。触发器作为纯文本文件存储在以下数据库文件夹中:
 
  /data_folder/database_name/table_name.trg
  也可通过查询information_schema数据库中的triggers表来显示触发器,如下所示:
 
  SELECT
      *
  FROM
      information_schema.triggers
  WHERE
      trigger_schema = 'database_name'
          AND trigger_name = 'trigger_name';
  该语句允许您查看触发器的内容及其元数据,例如:关联表名和定义器,这是创建触发器的MySQL用户的名称。
 
  如果要检索指定数据库中的所有触发器,则需要使用以下SELECT语句从information_schema数据库中的triggers表查询数据:
 
  SELECT
      *
  FROM
      information_schema.triggers
  WHERE
      trigger_schema = 'database_name';
  要查找与特定表相关联的所有触发器,请使用以下查询:
 
  SELECT
      *
  FROM
      information_schema.triggers
  WHERE
      trigger_schema = 'database_name'
          AND event_object_table = 'table_name';
  例如,以下查询语句与yiibaidb数据库中的employees表相关联的所有触发器。
 
  SELECT * FROM information_schema.triggers
  WHERE trigger_schema = 'yiibaidb'
          AND event_object_table = 'employees';
  执行上面查询,得到以下结果 -
 
  mysql> SELECT * FROM information_schema.triggers
  WHERE trigger_schema = 'yiibaidb'
          AND event_object_table = 'employees';
  +-----------------+----------------+------------------------+--------------------+----------------------+---------------------+--------------------+--------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+---------------+----------------------------+----------------------------+--------------------------+--------------------------+------------------------+-----------------------------------------------------------------------------------+----------------+----------------------+----------------------+--------------------+
  | 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 |
  +-----------------+----------------+------------------------+--------------------+----------------------+---------------------+--------------------+--------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+---------------+----------------------------+----------------------------+--------------------------+--------------------------+------------------------+-----------------------------------------------------------------------------------+----------------+----------------------+----------------------+--------------------+
  | def             | yiibaidb       | before_employee_update | UPDATE             | def                  | yiibaidb            | employees          |            1 | NULL             | BEGIN
      INSERT INTO employees_audit
      SET action = 'update',
       employeeNumber = OLD.employeeNumber,
          lastname = OLD.lastname,
          changedat = NOW();
  END | ROW                | BEFORE        | NULL                       | NULL                       | OLD                      | NEW                      | 2017-08-02 22:06:36.40 | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | root@localhost | utf8                 | utf8_general_ci      | utf8_general_ci    |
  +-----------------+----------------+------------------------+--------------------+----------------------+---------------------+--------------------+--------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+---------------+----------------------------+----------------------------+--------------------------+--------------------------+------------------------+-----------------------------------------------------------------------------------+----------------+----------------------+----------------------+--------------------+
  1 row in set
  MySQL SHOW TRIGGERS语句
 
  在特定数据库中显示触发器的另一种方法是使用SHOW TRIGGERS语句,如下所示:
 
  SHOW TRIGGERS [FROM|IN] database_name
  [LIKE expr | WHERE expr];
  例如,如果要查看当前数据库中的所有触发器,可以使用SHOW TRIGGERS语句,如下所示:
 
  SHOW TRIGGERS;
  要获取特定数据库中的所有触发器,请在SHOW TRIGGERS语句中指定数据库名称,比如要查询数据库:yiibaidb下的所有触发器,如下所示:
 
  SHOW TRIGGERS FROM yiibaidb;
  上面语句返回yiibaidb数据库中的所有触发器。
 
  要获取与特定表相关联的所有触发器,可以使用SHOW TRIGGERS语句中的WHERE子句。 以下语句返回与employees表相关联的所有触发器:
 
  SHOW TRIGGERS FROM yiibaidb
  WHERE `table` = 'employees';
  请注意,我们使用反引号包装table列,因为table是MySQL中的保留关键字。
 
  当执行SHOW TRIGGERS语句时,MySQL返回以下列 -
 
  请注意,要执行SHOW TRIGGERS语句,您必须具有SUPER权限。
 
  删除触发器
 
  要删除现有的触发器,请使用DROP TRIGGER语句,如下所示:
 
  DROP TRIGGER table_name.trigger_name;
  例如,如果要删除与employees表相关联的before_employees_update触发器,则可以执行以下语句:
 
  DROP TRIGGER employees.before_employees_update;
  要修改触发器,必须首先删除它并使用新的代码重新创建。在MySQL中没有类似:ALTER TRIGG
 

(编辑:草根网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章