1. 程式人生 > >Mysql資料庫中的觸發器操作

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