SQL Server 通過觸發器用來保證業務邏輯和資料的完整性。在SQL Server中,觸發器是一種特殊類型的存儲過程,可在執行語言事件時自動觸發。SQL Server中觸發器包括三種:DML觸發器、DDL觸發器和登入觸發器。
DML觸發器:執行DML語句觸發執行,例如操作資料表或視圖的insert、update、delete語句,不包含select。
DDL觸發器:執行DDL語句時觸發執行,例如create table等語句。
登入觸發器:在使用者登入SQL Server執行個體建立會話時觸發。
SQL Server将觸發器和觸發它的語句放在一個可復原事務中,如果觸發器發生異常,則與該觸發器相關的語句自動復原。
DML的功能(優點):
實作表的級聯更改,實作與外鍵限制相似的功能(如果外鍵可以限制,則不推薦使用觸發器)
防止惡意或錯誤的insert、update、delete操作。觸發器比check限制更加強大,觸發器可以引用其它資料表,執行更加複雜的限制,而check限制不能引用其它表。
可以擷取到更改前和修改後的資料,根據差異采取措施,決定是commit,還是rollback
一個表支援建立多個同類型的DML觸發器
注意:有日志操作的行為才會激活觸發器。例如truncate table删除表中所有資料,并沒有執行日志操作,是以不會激活delete觸發器。
DML觸發器分為:
after觸發器(之後觸發) insert觸發器
update觸發器
delete觸發器
instead of 觸發器 (之前觸發)
其中after觸發器要求隻有執行某一操作insert、update、delete之後觸發器才被觸發,且隻能定義在表上。而instead of觸發器表示并不執行其定義的操作(insert、update、delete)而僅是執行觸發器本身。既可以在表上定義instead of觸發器,也可以在視圖上定義。
觸發器有兩個特殊的表:插入表(instered表)和删除表(deleted表)。這兩張是邏輯表也是虛表。有系統在記憶體中建立者兩張表,不會存儲在資料庫中。而且兩張表的都是隻讀的,隻能讀取資料而不能修改資料。這兩張表的結果總是與被改觸發器應用的表的結構相同。當觸發器完成工作後,這兩張表就會被删除。Inserted表的資料是插入或是修改後的資料,而deleted表的資料是更新前的或是删除的資料。
Inserted邏輯表 Deleted邏輯表
增加記錄(insert) 存放增加的記錄 無
删除記錄(delete) 無 存放被删除的記錄
修改記錄(update) 存放更新後的記錄 存放更新前的記錄
Update資料的時候就是先删除表記錄,然後增加一條記錄。這樣在inserted和deleted表就都有update後的資料記錄了。注意的是:觸發器本身就是一個事務,是以在觸發器裡面可以對修改資料進行一些特殊的檢查。如果不滿足可以利用事務復原,撤銷操作。
insert觸發器,會在inserted表中添加一條剛插入的記錄。
delete觸發器會在删除資料的時候,将剛才删除的資料儲存在deleted表中。
update觸發器會在更新資料後,将更新前的資料儲存在deleted表中,更新後的資料儲存在inserted表中。
更新列級觸發器可以用update是否判斷更新列記錄;
instead of 觸發器表示并不執行其定義的操作(insert、update、delete)而僅是執行觸發器本身的内容。
文法:
本文代碼來源:http://www.cnblogs.com/hoojo/archive/2011/07/20/2111316.html
2021年9月 北京、西安兩地,高薪誠聘 .NET工程師,請私信聯系!
如果認為此文對您有幫助,别忘了支援一下哦!
聲明:本部落格原創文字隻代表本人工作中在某一時間内總結的觀點或結論,與本人所在機關沒有直接利益關系。轉載時請在文章頁面明顯位置給出原文連結。