1. 程式人生 > >SQL建立觸發器以及觸發器的使用例項+詳解

SQL建立觸發器以及觸發器的使用例項+詳解

MySQL的觸發器使用例項:

解決   觸發器被觸發後,向表裡插入資料時判斷該條記錄是否存在,如果存在則更新,不存在則插入 的問題

首先宣告一下 mysql  中寫的sql執行語句全部在  begin     end;  之間。寫在begin end;外面的sql語句無法執行。

用簡單的手動建表的辦法,建立兩個表。我用這兩個表來介紹觸發器該怎麼使用。

操作表(觸發器所在的表):  table                 執行表

(相應觸發器的表):   table1                 

刪除觸發器(delete) : 在 table 表中刪除一條資料的時候,刪除觸發器(delete)被觸發,它需要在 table1 表中插入主鍵,以及其它欄位屬性,    因為兩個表的主鍵是一致的,所以 在 table1 中插入資料的時候,如果 已經有主鍵了,那麼就會出現無法插入的動作,所以我們需要判斷 table1 表中是否已經有該主鍵,如果有那麼只進行欄位的更新,如果沒有再進行插入動作。 

SQL判斷 語句在觸發器中的實現:  定義的 id 是主鍵

BEGIN
  -- SQL語句 定義變數
  SET @id=OLD.id,@name=OLD.name,@image=OLD.image,@A=0;  --在觸發器中定義接收變數,用@標識接收變數。  

   if (SELECT COUNT(*) AS nums FROM table1 WHERE id=old.id)=0  --判斷table1中是否有table表傳過來相同的主鍵。
   then
--如果table1中沒有與傳過來相同的主鍵,那麼插入這條資料
    insert into table1(id,name,image,bz) values(@id,@name,MD5(@
[email protected]
),@A); else --如果table1中有相同的主鍵,那麼更新這條資料。 update table1 set name = @name,image=MD5(@[email protected]),[email protected] where id = old.id; --結束判斷 end if; END;

MD5(訊息摘要演算法): 在觸發器中是一個負責加密的函式,就好像指紋鎖一樣,相同的兩個資料 用MD5加密 的 hash值也是相同的。MD5可以為檔案加密。

解釋一下  @id=OLD.id ,這裡@id 是用來接收 OLD.id 的值, 而OLD.id 表示的是 table 表中資料刪除之前的id屬性值。

與  OLD  對應的  是 NEW, 如果是  更新觸發器 你會用到 NEW 屬性, 比如執行更新動作, OLD.id表示的是資料還未更新前的id值,而 NEW.id  則表示的是 資料更新後的 id 值。

舉一個  更新觸發器(update)含NEW的例子:(邏輯跟上面的一致)  還是 定義 id 是主鍵

BEGIN
SET @A = 2;
  set @id=new.id,@name=new.name;
   if (SELECT COUNT(*) AS nums FROM table1 WHERE id=new.id)=0 then
   insert into table1(id,name,image,bz) values (@id,@name,new.image,@A);
  else
  update table1 set name [email protected],image=new.image,[email protected]  where id = @id;
  end if;
END;