MySQL教程115-MySQL查看触发器

查看触发器是指查看数据库中已经存在的触发器的定义、状态和语法信息等。MySQL 中查看触发器的方法包括 SHOW TRIGGERS 语句和查询 information_schema 数据库下的 triggers 数据表等。下面将详细介绍这两种查看触发器的方法。

SHOW TRIGGERS语句查看触发器信息

在 MySQL 中,可以通过 SHOW TRIGGERS 语句来查看触发器的基本信息,语法格式如下:

SHOW TRIGGERS [FROM <数据库名>] [LIKE_OR_WHERE];

示例 1

查看数据库test_tb中的触发器, 如果是查看当前数据库中的触发器, 可以不写[FROM <DBNAME>]

mysql> show triggers\G;
*************************** 1. row ***************************
             Trigger: double_salary
               Event: INSERT
               Table: tb_emp6
           Statement: begin
    insert into tb_emp7 values (null, new.name, new.deptId, new.salary*2);
end
              Timing: BEFORE
             Created: 2020-08-27 14:35:47.02
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
             Definer: root@%
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8_general_ci
*************************** 2. row ***************************
             Trigger: SumOfSalary
               Event: INSERT
               Table: tb_emp8
           Statement: begin
    declare sum1 float;
    select sum(salary) into sum1 from tb_emp8;
    set @sum = sum1 + new.salary;
end
              Timing: BEFORE
             Created: 2020-08-27 14:17:23.23
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
             Definer: root@%
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8_general_ci
2 rows in set (0.00 sec)

由运行结果可以看到触发器的基本信息。对以上显示信息的说明如下:

  • Trigger 表示触发器的名称,在这里触发器的名称为 trigupdate;
  • Event 表示激活触发器的事件,这里的触发事件为更新操作 UPDATE;
  • Table 表示激活触发器的操作对象表,这里为 account 表;
  • Statement 表示触发器执行的操作,这里是向 myevent 数据表中插入一条数据;
  • Timing 表示触发器触发的时间,这里为更新操作之后(AFTER);
  • 还有一些其他信息,比如触发器的创建时间、SQL 的模式、触发器的定义账户和字符集等,这里不再一一介绍。

也可以根据表模糊查询, 作用于当前表的触发器, 如下:

mysql> show triggers like 'tb_emp6'\G;
*************************** 1. row ***************************
             Trigger: double_salary
               Event: INSERT
               Table: tb_emp6
           Statement: begin
    insert into tb_emp7 values (null, new.name, new.deptId, new.salary*2);
end
              Timing: BEFORE
             Created: 2020-08-27 14:35:47.02
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
             Definer: root@%
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)
mysql> show triggers like 'tb_emp%'\G;
*************************** 1. row ***************************
             Trigger: double_salary
               Event: INSERT
               Table: tb_emp6
           Statement: begin
    insert into tb_emp7 values (null, new.name, new.deptId, new.salary*2);
end
              Timing: BEFORE
             Created: 2020-08-27 14:35:47.02
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
             Definer: root@%
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8_general_ci
*************************** 2. row ***************************
             Trigger: SumOfSalary
               Event: INSERT
               Table: tb_emp8
           Statement: begin
    declare sum1 float;
    select sum(salary) into sum1 from tb_emp8;
    set @sum = sum1 + new.salary;
end
              Timing: BEFORE
             Created: 2020-08-27 14:17:23.23
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
             Definer: root@%
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8_general_ci
2 rows in set (0.00 sec)

SHOW TRIGGERS 语句用来查看当前创建的所有触发器的信息。因为该语句无法查询指定的触发器,所以在触发器较少的情况下,使用该语句会很方便。如果要查看特定触发器的信息或者数据库中触发器较多时,可以直接从 information_schema 数据库中的 triggers 数据表中查找。

在triggers表中查看触发器信息

在 MySQL 中,所有触发器的信息都存在 information_schema 数据库的 triggers 表中,可以通过查询命令 SELECT 来查看,具体的语法如下:

SELECT * FROM information_schema.triggers [WHERE expr];

其中,where条件中可以来指定要查看的触发器的名称,需要用单引号引起来。这种方式可以查询指定的触发器,使用起来更加方便、灵活。

示例 2

下面使用 SELECT 命令查看 double_salary触发器,SQL 语句如下:

 select * from information_schema.triggers where trigger_name like 'double%'\G;

上述命令通过 WHERE 来指定需要查看的触发器的名称,运行结果如下:

mysql>  select * from information_schema.triggers where trigger_name like 'double%'\G;
*************************** 1. row ***************************
           TRIGGER_CATALOG: def
            TRIGGER_SCHEMA: test_db
              TRIGGER_NAME: double_salary
        EVENT_MANIPULATION: INSERT
      EVENT_OBJECT_CATALOG: def
       EVENT_OBJECT_SCHEMA: test_db
        EVENT_OBJECT_TABLE: tb_emp6
              ACTION_ORDER: 1
          ACTION_CONDITION: NULL
          ACTION_STATEMENT: begin
    insert into tb_emp7 values (null, new.name, new.deptId, new.salary*2);
end
        ACTION_ORIENTATION: ROW
             ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
  ACTION_REFERENCE_OLD_ROW: OLD
  ACTION_REFERENCE_NEW_ROW: NEW
                   CREATED: 2020-08-27 14:35:47.02
                  SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
                   DEFINER: root@%
      CHARACTER_SET_CLIENT: utf8mb4
      COLLATION_CONNECTION: utf8mb4_0900_ai_ci
        DATABASE_COLLATION: utf8_general_ci
1 row in set (0.00 sec)

由运行结果可以看到触发器的详细信息。对以上显示信息的说明如下:

  • TRIGGER_SCHEMA 表示触发器所在的数据库;
  • TRIGGER_NAME 表示触发器的名称;
  • EVENT_OBJECT_TABLE 表示在哪个数据表上触发;
  • ACTION_STATEMENT 表示触发器触发的时候执行的具体操作;
  • ACTION_ORIENTATION 的值为 ROW,表示在每条记录上都触发;
  • ACTION_TIMING 表示触发的时刻是 AFTER;
  • 还有一些其他信息,比如触发器的创建时间、SQL 的模式、触发器的定义账户和字符集等,这里不再一一介绍。

上述 SQL 语句也可以不指定触发器名称,这样将查看所有的触发器,SQL 语句如下:

SELECT * FROM information_schema.triggers \G

这个语句会显示 triggers 数据表中所有的触发器信息。

posted @ 2020-08-27 15:30  KILLNPE  阅读(1292)  评论(0编辑  收藏  举报