zoukankan      html  css  js  c++  java
  • 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 triggersG;
    *************************** 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 数据表中所有的触发器信息。

  • 相关阅读:
    关于JSON可能出现的错误,待更/todo
    mongoose的安装与使用(书签记录) 2017
    HTTP的学习记录3--HTTPS和HTTP
    HTTP的学习记录(二)头部
    HTTP(一)概述
    LeetCode 455. Assign Cookies
    LeetCode 453. Minimum Moves to Equal Array Elements
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 447. Number of Boomerangs
    LeetCode 416. Partition Equal Subset Sum
  • 原文地址:https://www.cnblogs.com/no-celery/p/13571735.html
Copyright © 2011-2022 走看看