mysql 觸發器

奮程式序猿發表於2014-07-30

mysql 觸發器

監聽資料進行操作: 有點類似於js的事件。在當前表上,設定一個對每行資料的一個監聽器,監聽相關事件每當事件發生時,會執行一段由SQL完成的一段功能程式碼。

觸發器的元素:

事件和發生時間時執行的程式碼。

觸發器的建立:

Create trigger 名字 事件 執行性程式碼。

觸發器的事件分為:

插入 insert 刪除 delete 修改 update 事件的時機: before執行之前 和 after執行之後. 由時機和事件在一起,形成了六種事件。

 

觸發器的注意事項:

一個完整的事件應該規定,在哪張表上,什麼時機,什麼動作上。

Create trigger trigger_name after update on table_name for each row Update table_name set cz_money=cz_money-20;

Create trigger 建立觸發器.

 trigger_name:觸發器名字.

after update on  table_name : 為 觸發的事件 當czbk_truendt 表發生update 時,觸發Update table_name set cz_money=cz_money-20;這個語句!

注意:1. 觸發器不能重名 2.一個表同一個事件只能有一個觸發器。

 

觸發器的 刪除 檢視

刪除:  Drop trigger name ;   檢視: show create trigger name;

 

觸發器的資料old和new

在觸發器內,獲得觸發該觸發程式時的資料,利用觸發程式內的 new 和 old 來完成。 Old : 監聽事件所在表上的資料,在事件發生之前的資料,舊的資料。 New : 監聽表上,事件發生之後,新處理後的資料。 Old.stu_money 表示 stu_money欄位老的資料,new.stu_money 表示 stumoney欄位 的 新的資料;如果是 insert 事件 不能使用 old; 如果是 delete 事件 不能使用 new。

 

如果一個觸發程式,由多條sql 語句應該怎麼辦:

1. 語句組成語句塊用(begin end)來標示語句塊。

2. 語句組中的每個語句後需要用語句結束符來分割 ;如果使用分號作為每個語句的結束符那麼mysql可能會認為第一個語句結束就是觸發器的結束,所以我們需要在建立觸發器前修改語句結束符,觸發器建立結束後在修改回來。

Delimiter 命令可以設定命令結束符。

Delimiter $$;//將命令結束符號該為$$

Create trigger ruxue

after insert on czbk_student for each row

Begin//觸發語句組開始

Update class set stu_cout=stu_count+1;//應為在上面講結束符改為$$ 了所以分號不會結束語句

Update class set cz_money=cz_money+20;

End $$//觸發語句組結束 使用$$ 結束觸發器命令

 

Delimiter;在將語句結束符修改回來!

 

相關文章