1. 程式人生 > 其它 >MySQL檢視觸發器

MySQL檢視觸發器

檢視觸發器是指檢視資料庫中已經存在的觸發器的定義、狀態和語法資訊等。MySQL 中檢視觸發器的方法包括 SHOW TRIGGERS 語句查詢 information_schema 資料庫下的 triggers 資料表等。本節將詳細介紹這兩種檢視觸發器的方法。

SHOW TRIGGERS語句檢視觸發器資訊

在 MySQL 中,可以通過 SHOW TRIGGERS 語句來檢視觸發器的基本資訊,語法格式如下:

SHOW TRIGGERS;

示例 1

首先建立一個數據表 account,表中有兩個欄位,分別是 INT 型別的 accnum 和 DECIMAL 型別的 amount。SQL 語句和執行結果如下:

mysql> CREATE TABLE account(
    -> accnum INT(4),
    -> amount DECIMAL(10,2));
Query OK, 0 rows affected (0.49 sec)

建立一個名為 trigupdate 的觸發器,每次 account 表更新資料之後都向 myevent 資料表中插入一條資料。建立資料表 myevent 的 SQL 語句和執行結果如下:

mysql> CREATE TABLE myevent(
    -> id INT(11) DEFAULT NULL,
    -> evtname CHAR(20
) DEFAULT NULL); Query OK, 0 rows affected (0.26 sec)

建立 trigupdate 觸發器的 SQL 程式碼如下:

mysql> CREATE TRIGGER trigupdate AFTER UPDATE ON account
    -> FOR EACH ROW INSERT INTO myevent VALUES(1,'after update');
Query OK, 0 rows affected (0.15 sec)

使用 SHOW TRIGGERS 語句檢視觸發器(在 SHOW TRIGGERS 命令後新增\G,這樣顯示資訊會比較有條理),SQL 語句和執行結果如下:

mysql> SHOW TRIGGERS \G
*************************** 1. row ***************************
             Trigger: trigupdate
               Event: UPDATE
               Table: account
           Statement: INSERT INTO myevent VALUES(1,'after update')
              Timing: AFTER
             Created: 2020-02-24 14:07:15.08
            sql_mode: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
             Definer: root@localhost
character_set_client: gbk
collation_connection: gbk_chinese_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.09 sec)

由執行結果可以看到觸發器的基本資訊。對以上顯示資訊的說明如下:

  • Trigger 表示觸發器的名稱,在這裡觸發器的名稱為 trigupdate;
  • Event 表示啟用觸發器的事件,這裡的觸發事件為更新操作 UPDATE;
  • Table 表示啟用觸發器的操作物件表,這裡為 account 表;
  • Statement 表示觸發器執行的操作,這裡是向 myevent 資料表中插入一條資料;
  • Timing 表示觸發器觸發的時間,這裡為更新操作之後(AFTER);
  • 還有一些其他資訊,比如觸發器的建立時間、SQL 的模式、觸發器的定義賬戶和字符集等,這裡不再一一介紹。


SHOW TRIGGERS 語句用來檢視當前建立的所有觸發器的資訊。因為該語句無法查詢指定的觸發器,所以在觸發器較少的情況下,使用該語句會很方便。如果要檢視特定觸發器的資訊或者資料庫中觸發器較多時,可以直接從 information_schema 資料庫中的 triggers 資料表中查詢

在triggers表中檢視觸發器資訊

在 MySQL 中,所有觸發器的資訊都存在 information_schema 資料庫的 triggers 表中,可以通過查詢命令 SELECT 來檢視,具體的語法如下:

SELECT * FROM information_schema.triggers WHERE trigger_name= '觸發器名';

其中,'觸發器名'用來指定要檢視的觸發器的名稱,需要用單引號引起來。這種方式可以查詢指定的觸發器,使用起來更加方便、靈活。

示例 2

下面使用 SELECT 命令檢視 trigupdate 觸發器,SQL 語句如下:

SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME= 'trigupdate'\G

上述命令通過 WHERE 來指定需要檢視的觸發器的名稱,執行結果如下:

mysql> SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME= 'trigupdate'\G
*************************** 1. row ***************************
           TRIGGER_CATALOG: def
            TRIGGER_SCHEMA: test
              TRIGGER_NAME: trigupdate
        EVENT_MANIPULATION: UPDATE
      EVENT_OBJECT_CATALOG: def
       EVENT_OBJECT_SCHEMA: test
        EVENT_OBJECT_TABLE: account
              ACTION_ORDER: 1
          ACTION_CONDITION: NULL
          ACTION_STATEMENT: INSERT INTO myevent VALUES(1,'after update')
        ACTION_ORIENTATION: ROW
             ACTION_TIMING: AFTER
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
  ACTION_REFERENCE_OLD_ROW: OLD
  ACTION_REFERENCE_NEW_ROW: NEW
                   CREATED: 2020-02-24 16:07:15.08
                  SQL_MODE: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
                   DEFINER: root@localhost
      CHARACTER_SET_CLIENT: gbk
      COLLATION_CONNECTION: gbk_chinese_ci
        DATABASE_COLLATION: latin1_swedish_ci
1 row in set (0.22 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 資料表中所有的觸發器資訊。