6.觸發器(trigger)
含義:觸發器也是一段預先定義好的代碼(跟存儲過程和存儲函數一樣),並有個名字。
但:
它不能調用,而是,在某個表發生某個事件(增、刪、改)的時候,會自動“觸發”而調用起來。
定義形式:
Create trigger 觸發器名 觸發時機 觸發事件 on 表名 for eachrow
Begin
//語句塊
End;
說明:1.觸發時機只有兩個:before(在之前),after(在之後);
2.觸發事件只有三個:insert、update、delete
3.觸發器的含義是:在某個表上進行insert、update以及delete之前或之後,會去執行其中寫好的代碼(語句);即只有6個情形會可能調用該觸發器
4.通常觸發器用於在對某個表進行增刪改的操作的時候,需要同時去做另外一件事情的時候
5.在觸發器內部有兩個關鍵字代表某種特定的含義,可以用來獲取數據
New:代表當前正要執行的insert或update的時候的“新行“數據,通過它,可以獲取這一新行數據的任意一個字段的值,形式爲:
Set @v1=new.id;//獲取新插入或update行的id字段的值
Old:代表當前正要執行的delete的時候的“舊行“數據,通過它,可以獲取這一新行數據的任意一個字段的值,形式爲:
Set@v1=old.id;
Tab_int_max1始終存儲tab_int的最大值,當tab_int中插入數據時,觸發器執行
例:
create trigger tri1 after insert on tab_int for each row
Begin
Delete from tab_int_max1; #刪除tab_int_max1中所有值
Select max(f1) into @maxf1 from tab_int; #取得tab_int中的最大值存入變量
Select f2 into @v2 from tab_int where f1=@maxf1;
Select f3 into @v3 from tab_int where f1=@maxf1;
Insert into tab_int_max1 (f1,f2,f3) values (@maxf1,@v2,@v3);
End;
在表tab_int進行insert之前,將該行數據同時插入到跟其類似結果的表(tab_int_some)中。
create trigger copy_data before insert on tab_int for each row
Begin
Set @v1=new.f1; #獲得新行的字段f1的值
Set @v2=new.f2; #獲得新行的字段f2的值
Insert into tab_int_some (f1,f2) values (@v1,@v2);
End;