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;在將語句結束符修改回來!