日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL创建触发器以及触发器的使用实例+详解

發(fā)布時間:2024/8/1 数据库 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL创建触发器以及触发器的使用实例+详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL的觸發(fā)器使用實例:

解決? ?觸發(fā)器被觸發(fā)后,向表里插入數據時判斷該條記錄是否存在,如果存在則更新,不存在則插入 的問題

首先聲明一下?mysql? 中寫的sql執(zhí)行語句全部在? begin? ? ?end;? 之間。寫在begin end;外面的sql語句無法執(zhí)行。

用簡單的手動建表的辦法,創(chuàng)建兩個表。我用這兩個表來介紹觸發(fā)器該怎么使用。

操作表(觸發(fā)器所在的表):? table? ? ? ? ? ? ? ? ?執(zhí)行表(相應觸發(fā)器的表):? ?table1? ?? ? ? ? ? ? ??

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

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

BEGIN-- SQL語句 定義變量SET @id=OLD.id,@name=OLD.name,@image=OLD.image,@A=0; --在觸發(fā)器中定義接收變量,用@標識接收變量。 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(@id+@name),@A);else --如果table1中有相同的主鍵,那么更新這條數據。update table1 set name = @name,image=MD5(@id+@name),bz=@A where id = old.id; --結束判斷end if;END;

MD5(消息摘要算法): 在觸發(fā)器中是一個負責加密的函數,就好像指紋鎖一樣,相同的兩個數據 用MD5加密 的 hash值也是相同的。MD5可以為文件加密。

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

與? OLD? 對應的? 是 NEW, 如果是? 更新觸發(fā)器 你會用到 NEW 屬性, 比如執(zhí)行更新動作, OLD.id表示的是數據還未更新前的id值,而 NEW.id? 則表示的是 數據更新后的 id 值。

舉一個? 更新觸發(fā)器(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 theninsert into table1(id,name,image,bz) values (@id,@name,new.image,@A);elseupdate table1 set name =@name,image=new.image,bz=@A where id = @id;end if; END;

?

總結

以上是生活随笔為你收集整理的SQL创建触发器以及触发器的使用实例+详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。