觸發器(創建、查看、使用、刪除)


一、創建觸發器

觸發器(TRIGGER)是由 INSERTUPDATE DELETE 等事件來觸發某種特定操作。滿足觸發器的觸發條件時,數據庫系統就會執行觸發器中定義的程序語句。這樣可以保證某些操作之間的一致性。

1、創建只有一個執行語句的觸發器,基本形式如下:

CREATE  TRIGGER  觸發器名  BEFORE | AFTER  觸發事件

ON   表名  FOR  EACH ROW 執行語句

其中,觸發器名  參數指要創建的觸發器的名字;BEFORE AFTER 參數指定觸發器執行的時間,BEFORE 指在觸發事件之前執行觸發語句,AFTER 指在觸發事件之后執行觸發語句; 觸發事件  參數指觸發的條件,其中包括 INSERTUPDATE DELETE;表名 參數指觸發事件操作的表的名稱;FOR EACH ROW 表示任何一條記錄上的操作滿足觸發事件都會觸發該觸發器;執行語句  參數 指觸發器被觸發后執行的程序。

mysql> CREATE TRIGGER dept_trig1 BEFORE INSERT

    -> ON department FOR EACH ROW

    -> INSERT INTO triger_time VALUES(NOW());

說明:當向department 表中執行INSERT 操作時,數據庫系統都會在 INSERT 語句執行之前向 triger_time 表中插入當前時間。

2、創建有多個執行語句的觸發器,基本形式如下:

CREATE  TRIGGER  觸發器名  BEFORE | AFTER  觸發事件

ON  表名  FOR  EACH  ROW

BEGIN

執行語句列表

END

其中,BEGIN END 中間的 執行語句列表 參數表示需要執行的多個執行語句的內容。不同的執行語句之間用分號隔開。

一般情況下MySQL默認是以";"(分號)作為結束執行語句。在創建觸發器過程中需要用到分號,為了解決這個問題,可以用DELIMITER 語句。如下:

mysql> DELIMITER &&

mysql> CREATE TRIGGER dept_trig2 AFTER DELETE

    -> ON department FOR EACH ROW

    -> BEGIN

    -> INSERT INTO trigger_time VALUES('21:01:01');                                            

    -> INSERT INTO trigger_time VALUES('22:01:01');                                            

    -> END

    -> &&

 

二、查看觸發器

查看觸發器是指查看數據庫中已存在的觸發器的定義、狀態和語法等信息。查看觸發器的方法包括 SHOW TRIGGERS 語句和查詢 information_schma 數據庫下的 triggers 表等。

mysql> SHOW TRIGGERS \G 查詢所有觸發器的信息,不能查詢指定的觸發器

mysql> SELECT * FROM information_schema.triggers \G 查詢tiggers中的信息,會顯示所有觸發器的詳細信息

mysql> SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='dept_trig1' \G 只查詢dept_trig1觸發器的詳細信息。

 

、觸發器的使用

MySQL中,觸發器執行的順序是 BEFORE 觸發器、表操作(INSERTUPDATE DELETE) AFTER 觸發器。

department 表上創建BEFORE INSERT AFTER INSERT 這兩個觸發器。

mysql> CREATE TRIGGER before_insert BEFORE INSERT

    -> ON department FOR EACH ROW

    -> INSERT INTO trigger_test VALUES(null,"before_insert"); 創建BEFORE INSERT 觸發器

mysql> CREATE TRIGGER after_insert AFTER INSERT

    -> ON department FOR EACH ROW

    -> INSERT INTO trigger_test VALUES(null,"after_insert"); 創建AFTER INSERT 觸發器

mysql> INSERT INTO department VALUES(1003,'HAOHOA','HELLO','YES'); department插入一條記錄用來實驗前面兩個觸發器的動作先后順序。

mysql> SELECT * FROM trigger_test; 可以查看到BEFORE INSERT 先於AFTER INSERT動作

+----+---------------+

| id | info          |

+----+---------------+

| 1 | before_insert |

| 2 |   after_insert  |

+----+---------------+

1 row in set (0.00 sec)

 

、刪除觸發器

刪除觸發器指刪除數據庫中已經存在的觸發器。基本形式如下:

DROP  TRIGGER  觸發器名 | 數據庫名.觸發器名;

其中,觸發器名  參數指要刪除的觸發器的名稱。如果只指定觸發器名稱,數據庫系統會在當前數據庫下查找該觸發器,如果找到就刪除。 觸發器名 | 數據庫名.觸發器名 表示兩者選其中一個。不再需要的觸發器一定要刪除掉。

mysql> DROP TRIGGER test2.dept_trig1; 指定刪除數據庫test2下的觸發器dept_trig1,如果不指定數據庫test2,則刪除當前數據庫下的觸發器dept_trig1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM