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 數據表中所有的觸發器信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM