在做個人版機房的時候沒實用到觸發器。於是在做新聞公佈系統的時候再一次遇到。第一次使用。第一印象就是裡邊充滿了邏輯問題和順序問題,以下先從主要的講起:
什麼是觸發器??
它是一種特殊的儲存過程。不像普通儲存過程。它是由事件觸發而不是人為決定。它經經常使用於加強資料約束的完整性和業務規則。
為什麼要用觸發器??
1、速度快:儲存過程在呼叫前就已經編譯好了,所以儲存過程能以極快的速度執行。
2、儲存過程能夠反覆使用,可降低資料庫開發者的工作量 。
3、保證資料的安全性:使沒有許可權的使用者在控制之下間接地存取資料庫
4、保證資料的完整性:使相關的動作在一起發生
觸發器能夠隨便用嗎?
不能夠,不論什麼事物都有兩面性,因為我們的濫用會造成資料庫及應用程式的維護困難,在資料庫操作中,我們能夠通過關係、觸發器、儲存過程、應用程式等來實現資料操作……同一時候規則、約束、預設值也是保證資料完整性的重要保障。假設我們對觸發器過分的依賴,勢必影響資料庫的結構。同一時候新增了維護的複雜程度。
觸發器都有哪些內容呢?
以下來看一張圖:
結合例項看一下:
在部落格開始我說觸發器有邏輯性和順序性是在做新聞公佈系統中感受到的。新聞公佈系統中用到的觸發器是刪除新聞類別。它有級聯效果和順序,儘管說使用者在刪除的時候是刪除的類別,但在資料庫中的操作卻不只如此:依據類別id--查詢新聞表下要刪除的新聞(但不刪除)--依據找到的新聞id--查詢評論表下新聞id相應的全部評論--刪除評論--刪除新聞--刪除類別,看一下程式碼:
<span style="color: rgb(51, 51, 51); background-color: rgb(240, 240, 240);">-- =============================================
-- Author: 王丹
-- Create date: 2014-06-09 20:14
-- Description: 刪除類別觸發器
-- =============================================
ALTER TRIGGER [dbo].[trigCategoryDelete]
ON [dbo].[category]
</span><span style="color: rgb(51, 51, 51); background-color: rgb(255, 255, 102);">instead of</span><span style="background-color: rgb(240, 240, 240);"><span style="color:#333333;"> </span><span style="color:#ff0000;">DELETE</span><span style="color:#333333;">
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觸發器,它是在執行刪除某條語句之前所要觸發的事件。實踐和應用就會讓知識變得不再陌生。放下內心的陌生感,只去做,一定能夠的!