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(@id+@name),@A);else --如果table1中有相同的主鍵,那么更新這條數據。update table1 set name = @name,image=MD5(@id+@name),bz=@A 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 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创建触发器以及触发器的使用实例+详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Diablo II中的各种hacks
- 下一篇: java Socket 编程实例