mysql編程--觸發器

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;


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章