SQL建立觸發器以及觸發器的使用例項+詳解
阿新 • • 發佈:2018-11-30
MySQL的觸發器使用例項:
解決 觸發器被觸發後,向表裡插入資料時判斷該條記錄是否存在,如果存在則更新,不存在則插入 的問題
首先,宣告一下 mysql 中寫的sql執行語句全部在 begin end; 之間。寫在begin end;外面的sql語句無法執行。
用簡單的手動建表的辦法,建立兩個表。我用這兩個表來介紹觸發器該怎麼使用。
操作表(觸發器所在的表): table 執行表
刪除觸發器(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;