查看觸發器是指查看數據庫中已經存在的觸發器的定義、狀態和語法信息等。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 數據表中所有的觸發器信息。