MySQL筆記之觸發器的運用。本站提示廣大學習愛好者:(MySQL筆記之觸發器的運用)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL筆記之觸發器的運用正文
創立觸發器
創立只要一個履行語句的觸發器
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)
下面創立了一個名為trig1的觸發器,一旦在work中有拔出舉措,就會主動往time內外拔出以後時光
創立有多個履行語句的觸發器
CREATE TRIGGER 觸發器名 BEFORE|AFTER 觸發事宜
ON 表名 FOR EACH ROW
BEGIN
履行語句列表
END
個中,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
tips:一切觸發器信息都存儲在information_schema數據庫下的triggers表中
可使用SELECT語句查詢,假如觸發器信息過量,最好經由過程TRIGGER_NAME字段指定查詢
刪除觸發器
mysql> DROP TRIGGER trig1;
Query OK, 0 rows affected (0.04 sec)
刪除觸發器以後最好應用下面的辦法檢查一遍
同時,也能夠應用database.trig來指定某個數據庫中的觸發器
tips:假如不須要某個觸發器時必定要將這個觸發器刪除,以避免形成不測操作