閱讀126 返回首頁    go 阿裏雲 go 技術社區[雲棲]


淺談觸發器

            在做個人版機房的時候沒有用到觸發器,於是在做新聞發布係統的時候再一次遇到,第一次使用,第一印象就是裏邊充滿了邏輯問題和順序問題,下麵先從基本的講起:

          什麼是觸發器??

          它是一種特殊的存儲過程,不像普通存儲過程,它是由事件觸發而不是人為決定。它經常用於加強數據約束的完整性和業務規則。

          為什麼要用觸發器??           

            1、速度快:存儲過程在調用前就已經編譯好了,所以存儲過程能以極快的速度執行。

     2、存儲過程可以重複使用,可減少數據庫開發人員的工作量 。

     3、保證數據的安全性:使沒有權限的用戶在控製之下間接地存取數據庫

     4、保證數據的完整性:使相關的動作在一起發生

        觸發器可以隨便用嗎?

         不可以,任何事物都有兩麵性,由於我們的濫用會造成數據庫及應用程序的維護困難,在數據庫操作中,我們可以通過關係、觸發器、存儲過程、應用程序等來實現數據操作……同時規則、約束、缺省值也是保證數據完整性的重要保障。如果我們對觸發器過分的依賴,勢必影響數據庫的結構,同時增加了維護的複雜程度。

     觸發器都有哪些內容呢?

     下麵來看一張圖:

     

    結合實例看一下:

        在博客開始我說觸發器有邏輯性和順序性是在做新聞發布係統中感受到的,新聞發布係統中用到的觸發器是刪除新聞類別,它有級聯效果和順序,雖然說用戶在刪除的時候是刪除的類別,但在數據庫中的操作卻不僅僅如此:根據類別id--查找新聞表下要刪除的新聞(但不刪除)--根據找到的新聞id--查找評論表下新聞id對應的所有評論--刪除評論--刪除新聞--刪除類別,看一下代碼:  

<span >-- =============================================
-- Author:		王丹
-- Create date: 2014-06-09 20:14
-- Description:	刪除類別觸發器
-- =============================================
ALTER TRIGGER [dbo].[trigCategoryDelete]
   ON [dbo].[category]
   </span><span >instead of</span><span ><span > </span><span >DELETE</span><span >
AS 
BEGIN
	declare @caId int
	--查找要刪除的id
	select @caId=id from deleted
	delete comment where newsId=(select newsId from news where caId=@caId )
	--刪除新聞
	delete news where caId=@caId
	--刪除類別
	delete category where id=@caId

END</span></span>
    以上這個例子用到的是instead of觸發器,它是在執行刪除某條語句之前所要觸發的事件。實踐和應用就會讓知識變得不再陌生,放下內心的陌生感,僅僅去做,一定可以的!

最後更新:2017-04-03 07:56:58

  上一篇:go git上上傳項目
  下一篇:go Swift 學習中文網址