Mysql資料庫中的觸發器操作
資料庫物件觸發器用來實現由一些表事件觸發的某個操作,是與資料庫物件表關聯最緊密的資料庫物件之一。在資料庫系統中,當執行表事件時,則會啟用觸發器,從而執行其包含的操作。
觸發器是MySQL的資料庫物件之一,該物件與程式語言中的函式非常類似,都需要宣告、執行等。但是觸發器的執行不是由程式呼叫,也不是由手工調動,而是由事件來觸發、啟用從而實現執行。
為什麼使用資料庫物件觸發器?
先舉一個例子,在學生表中擁有欄位學生名字,欄位學生總數,每當新增一條關於學生記錄時,學生的總數就必須同時改變。
對於這個例子,可以建立一個觸發器物件,每次新增一條學生記錄時,就執行一次計算學生總數的操作,這樣就可以保證每次新增一條學生記錄後,學生總數與學生記錄數一致。
MySQL在觸發如下語句時,就會自動執行所設定的操作:
DELETE 語句
INSERT語句
UPDATE語句
其他SQL語句則不會啟用觸發器。在具體的應用中,之所以會經常使用觸發器資料庫物件,是由於該物件能夠加強資料庫表中資料的完整性約束和業務規則等。
1.觸發器建立
(1)建立一條執行語句的觸發器
create trigger trigger_name
BEFORE|AFTER trigger_EVENT
ON TABLE_NAME FOR EACH ROW trigger_STMT
trigger_name引數表示所要建立的觸發器名字;BEFORE和AFTER引數指定了觸發器執行的時間,BEFORE是指在觸發器事件之前執行觸發器語句,AFTER表示在觸發器事件之後執行觸發器語句;trigger_EVENT引數表示觸發事件,即觸發器執行條件,包含DELETE、INSERT和UPDATE語句;FOR EACH ROW 引數表示任何一條記錄上的操作滿足觸發事件都會觸發該觸發器;trigger_STMT引數表示啟用觸發器後被執行的語句。
CREATE TRIGGER tri_diarytime
BEFORE INSERT
ON t_dept FOR EACH ROW
INSERT INTO t_diary VALUES(NULL,'t_dept',now());
#上述語句表示建立了觸發器tri_diarytime,當向部門表t_dept中插入任意一條記錄時,就會在插入操作之前向表t_diary中插入當前時間記錄。
INSERT INTO t_dept VALUES(1,'cjgongdept','shangxi');
SELECT *
FROM t_diary; #校驗資料庫company中觸發器tri_diarytime的功能。
(2)建立包含多條執行語句的觸發器
DELIMITER $$
CREATE TRIGGER tri_diarytime2
AFTER INSERT
ON t_dept FOR EACH ROW
BEGIN
INSERT INTO t_diary VALUES(NULL,'t_dept',now());
INSERT INTO t_diary VALUES(NULL,'t_dept',now());
END
$$
DELIMITER ;
2.檢視觸發器
(1) SHOW TRIGGERS \G
(2) 通過檢視系統表triggers實現檢視觸發器
USE information_schema;
SELECT * FROM triggers \G
SELECT * FROM TRIGGERS WHERE TRIGGER_NAME='tri_diarytime2' \G
(3)刪除觸發器
DROP TRIGGER trigger_name