SQL觸發器(二)

iSQlServer發表於2009-07-23

1、觸發器的 "本質":

觸發器是一種特殊的儲存過程,它不能被顯式地呼叫,而是在往表中插入記錄、更改記錄或者刪除記錄時,當事件發生時,才被自動地啟用。

2、這樣做帶來的 "功能":

觸發器可以用來對錶實施複雜的完整性約束,保持資料的一致性,當觸發器所保護的資料發生改變時,觸發器會自動被啟用,響應同時執行一定的操作(對其它相關表的操作),從而保證對資料的不完整性約束或不正確的修改。觸發器可以查詢其它表,同時也可以執行復雜的T-SQL語句。觸發器和引發觸發器執行的命令被當作一次事務處理,因此就具備了事務的所有特徵。注意: "事務具備什麼特徵?在觸發器中的作用?"如果發現引起觸發器執行的T-SQL語句執行了一個非法操作,比如關於其它表的相關性操作,發現資料丟失或需呼叫的資料不存在,那麼就回滾到該事件執行前的SQL Server資料庫狀態。

3、觸發器的作用:

觸發器可以對資料庫進行級聯修改,這一點剛才已經說過了。需要說明的是: "觸發器和約束的關係和區別"

(1)一般來說,使用約束比使用觸發器效率更高。 
(2)同時,觸發器可以完成比CHECK約束更復雜的限制。

說明:

2.1 與CHECK約束不同,在觸發器中可以引用其它的表。 
2.2 觸發器可以發現改變前後表中資料的不一致,並根據這些不同來進行相應的操作。 
2.3 對於一個表不同的操作(INSERT、UPDATE、DELETE)可以採用不同的觸發器,即使是對相同的語句也可以呼叫不同的觸發器來完成不同的操作。

舉例1:在簽訂一份訂單時,貨物的庫存量應減少。

問?這應用了觸發器的什麼特徵?CHECK約束能解決嗎?

舉例2:正在進行整理的貨物不能下訂單。

問?這應用了觸發器的什麼特徵?CHECK約束能解決嗎?

4、對觸發器3種操作的分析:

在SQL Server為每個觸發器都建立了兩個專用表:inserted表和deleted表。這是兩個邏輯表,由系統來維護,在觸發執行時存在,在觸發結束時消失。這樣有什麼用途?帶著問題看,具體操作步驟和過程:

(1)deleted表存放由於執行delete或update語句而要從表中刪除的所有行。
在執行delete或update操作時,被刪除的行從啟用觸發器的表中被移動(move)到deleted表,這兩個表不會有共同的行。

(2)inserted表存放由於執行insert或update語句而要向表中插入的所有行。 
在執行insert或update事物時,新的行同時新增到啟用觸發器的表中和inserted表中,inserted表的內容是啟用觸發器的表中新行的拷貝。

說明:update事務可以看作是先執行一個delete操作,再執行一個insert操作,舊的行首先被移動到deleted表,讓後新行同時新增到啟用觸發器的表中和inserted表中。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-609999/,如需轉載,請註明出處,否則將追究法律責任。

相關文章