觸發器(一)-------觸發器概述、遞歸觸發器

什麼是觸發器?

觸發器是一個在修改制定表中的數據時執行的存儲過程。通常通過創建觸發器來強制實現不同表中的邏輯相關數據的引用完整性或一致性。由於用戶不能繞過觸發器,所以可以用它來強制實施複雜的業務規則,以此確保數據的完整性。

觸發器不同於存儲過程。觸發器主要是通過事件進行觸發而被執行的,而存儲過程可以通過存儲過程的名字而被直接調用。當對某一表進行UPDATE、INSERT、DELETE這些操作時,SQL Server就會自動執行觸發器所定義的SQL語句,從而確保對數據的處理必須符合由這些SQL語句所定義的規則。

爲什麼要使用觸發器?

觸發器自動執行,它們在表的數據作了任何修改(比如手工輸入或者使用程序採集的操作)之後立即激活

觸發器可以通過數據庫中的相關表進行層疊更改。這比直接把代碼寫在前臺的做法更安全合理。

觸發器可以強制限制,這些限制比用CHECK約束所定義的更復雜。與CHECK約束不同的是,觸發器可以應用其他表中的列。

觸發器有哪些種類?

DML觸發器

DML觸發器是當數據庫服務器中發生數據庫操作語言(DML)事件時要執行的操作。通常所說的DML觸發器主要包括三種:INSERT觸發器、UPDATE觸發器、DELETE觸發器。DML觸發器可以查詢其他表,還可以包含複雜的T-SQL語句。將觸發器和出發它的語句作爲可在觸發器內回滾的單個事務對待。如果檢測到錯誤,則整個事務自動回滾。

DDL觸發器

DDL觸發器當服務器或者數據庫中發生數據定義語言(DDL)事件時將被調用。如果要執行以下操作,可以使用DDL觸發器:

要防止對數據庫架構進行某些更改

希望數據庫中發生某種情況以響應數據庫架構中的更改

要記錄數據庫架構中的更改或者事件

遞歸觸發器(慎重使用)

任何觸發器都可以包含影響同一個表或另一個表的UPDATE、INSERT或DELETE語句。如果啓用遞歸觸發器選項,那麼改變表中數據的觸發器,通過遞歸執行就可以再次出發自己。在數據庫創建時,默認情況下遞歸觸發器選項是禁用的,但可以使用ALTER DATABASE語句來啓用它。如下圖:

遞歸觸發器具有複雜特性,可以用它來解決諸如自引用關係這樣的複雜關係。使用遞歸觸發器時,需要考慮一下的事項和原則:

▶遞歸觸發器很複雜,必須經過有條理的設計和全面的測試

▶在任意點的數據修改會出發一系列觸發器。儘管提供處理複雜關係的能力,但是如果表要求以特定的順序更新用戶的表時,使用遞歸觸發器就會產生問題

▶所有觸發器一起構成一個大事務。任何觸發器中的任何位置上的ROLLBACK命令都將取消所有數據輸入。所有數據均被擦除,並且無任何數據將被放到表中

▶觸發器最多隻能遞歸16層,換句話說,如果遞歸鏈中的第16個觸發器激活了第17個觸發器,則結果與發佈ROLLBACK命令一樣,所有數據將被擦除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章