《MYSQL數據庫MySQL筆記之觸發器的應用》要點:
本文介紹了MYSQL數據庫MySQL筆記之觸發器的應用,希望對您有用。如果有疑問,可以聯系我們。
MYSQL教程創建觸發器
創建只有一個執行語句的觸發器
代碼如下:
CREATE TRIGGER 觸發器名 BEFORE|AFTER 觸發事件
ON 表名 FOR EACH ROW 執行語句
其中,觸發器名參數指要創建的觸發器的名字
MYSQL教程BEFORE和AFTER參數指定了觸發執行的時間,在事件之前或是之后
MYSQL教程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表里插入當前時間
MYSQL教程
創建有多個執行語句的觸發器
代碼如下:
CREATE TRIGGER 觸發器名 BEFORE|AFTER 觸發事件
ON 表名 FOR EACH ROW
BEGIN
??? 執行語句列表
END
其中,BEGIN與END之間的執行語句列表參數表示需要執行的多個語句,不同語句用分號隔開
MYSQL教程tips:一般情況下,mysql默認是以 ; 作為結束執行語句,與觸發器中需要的分行起沖突
MYSQL教程 ?? 為辦理此問題可用DELIMITER,如:DELIMITER ||,可以將結束符號變成||
MYSQL教程 ?? 當觸發器創建完成后,可以用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教程mysql> DELIMITER ;
上面的語句中,開頭將結束符號定義為||,中間定義一個觸發器,一旦有滿足條件的刪除操作
MYSQL教程就會執行BEGIN和END中的語句,接著使用||結束
MYSQL教程最后使用DELIMITER ; 將結束符號還原
MYSQL教程
查看觸發器
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
結果會顯示所有觸發器的基本信息
MYSQL教程tips:SHOW TRIGGERS語句無法查詢指定的觸發器
MYSQL教程
在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表中
MYSQL教程 ?? 可以使用SELECT語句查詢,如果觸發器信息過多,最好通過TRIGGER_NAME字段指定查詢
MYSQL教程
刪除觸發器
代碼如下:
mysql> DROP TRIGGER trig1;
Query OK, 0 rows affected (0.04 sec)
刪除觸發器之后最好使用上面的辦法查看一遍
MYSQL教程同時,也可以使用database.trig來指定某個數據庫中的觸發器
MYSQL教程tips:如果不需要某個觸發器時必定要將這個觸發器刪除,以免造成意外操作
歡迎參與《MYSQL數據庫MySQL筆記之觸發器的應用》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/12370.html