創建觸發器
創建只有一個執行語句的觸發器
復制代碼 代碼如下:
CREATE TRIGGER 觸發器名 BEFORE|AFTER 觸發事件
ON 表名 FOR EACH ROW 執行語句
BEFORE和AFTER參數指定了觸發執行的時間,在事件之前或是之后
FOR EACH ROW表示任何一條記錄上的操作滿足觸發事件都會觸發該觸發器
復制代碼 代碼如下:
mysql> CREATE TRIGGER trig1 AFTER INSERT
    -> ON work FOR EACH ROW
    -> INSERT INTO time VALUES(NOW());
Query OK, 0 rows affected (0.09 sec)
創建有多個執行語句的觸發器
復制代碼 代碼如下:
CREATE TRIGGER 觸發器名 BEFORE|AFTER 觸發事件
ON 表名 FOR EACH ROW
BEGIN
    執行語句列表
END
tips:一般情況下,mysql默認是以 ; 作為結束執行語句,與觸發器中需要的分行起沖突
為解決此問題可用DELIMITER,如:DELIMITER ||,可以將結束符號變成||
     當觸發器創建完成后,可以用DELIMITER ;來將結束符號變成;
復制代碼 代碼如下:
mysql> DELIMITER ||
mysql> CREATE TRIGGER trig2 BEFORE DELETE
    -> ON work FOR EACH ROW
    -> BEGIN
    -> INSERT INTO time VALUES(NOW());
    -> INSERT INTO time VALUES(NOW());
    -> END
    -> ||
Query OK, 0 rows affected (0.06 sec)
mysql> DELIMITER ;
就會執行BEGIN和END中的語句,接著使用||結束
最后使用DELIMITER ; 將結束符號還原
查看觸發器
SHOW TRIGGERS語句查看觸發器信息
復制代碼 代碼如下:
mysql> SHOW TRIGGERS/G;
*************************** 1. row ***************************
Trigger: trig1
Event: INSERT
Table: work
Statement: INSERT INTO time VALUES(NOW())
Timing: AFTER
Created: NULL
sql_mode: 
Definer: root@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
tips:SHOW TRIGGERS語句無法查詢指定的觸發器
在triggers表中查看觸發器信息
復制代碼 代碼如下:
mysql> SELECT * FROM information_schema.triggers/G
*************************** 1. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: person
TRIGGER_NAME: trig1
EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: person
EVENT_OBJECT_TABLE: work
ACTION_ORDER: 0
ACTION_CONDITION: NULL
ACTION_STATEMENT: INSERT INTO time VALUES(NOW())
復制代碼 代碼如下:
mysql> SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='trig1'/G
*************************** 1. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: person
TRIGGER_NAME: trig1
EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: person
EVENT_OBJECT_TABLE: work
可以使用SELECT語句查詢,如果觸發器信息過多,最好通過TRIGGER_NAME字段指定查詢
刪除觸發器
復制代碼 代碼如下:
mysql> DROP TRIGGER trig1;
Query OK, 0 rows affected (0.04 sec)
同時,也可以使用database.trig來指定某個數據庫中的觸發器
tips:如果不需要某個觸發器時一定要將這個觸發器刪除,以免造成意外操作
新聞熱點
疑難解答