SQL Server觸發(fā)器

SqlServer包括三種常規(guī)類型的觸發(fā)器:DML觸發(fā)器、DDL觸發(fā)器和登錄觸發(fā)器。

1.DML(數(shù)據(jù)操作語言,Data?Manipulation?Language)觸發(fā)器

?DML觸發(fā)器是一些附加在特定表或視圖上的操作代碼,當數(shù)據(jù)庫服務(wù)器中發(fā)生數(shù)據(jù)操作語言事件時執(zhí)行這些操作。SqlServer中的DML觸發(fā)器有三種:

1、insert觸發(fā)器:向表中插入數(shù)據(jù)時被觸發(fā);

2、delete觸發(fā)器:從表中刪除數(shù)據(jù)時被觸發(fā);

3、update觸發(fā)器:修改表中數(shù)據(jù)時被觸發(fā)。

2.DDL(數(shù)據(jù)定義語言,Data?Definition?Language)觸發(fā)器

?DDL觸發(fā)器是當服務(wù)器或者數(shù)據(jù)庫中發(fā)生數(shù)據(jù)定義語言(主要是以create,drop,alter開頭的語句)事件時被激活使用,使用DDL觸發(fā)器可以防止對數(shù)據(jù)架構(gòu)進行的某些更改或記錄數(shù)據(jù)中的更改或事件操作

3.登錄觸發(fā)器

????登錄觸發(fā)器將為響應?LOGIN?事件而激發(fā)存儲過程。與?SQL?Server?實例建立用戶會話時將引發(fā)此事件。登錄觸發(fā)器將在登錄的身份驗證階段完成之后且用戶會話實際建立之前激發(fā)。因此,來自觸發(fā)器內(nèi)部且通常將到達用戶的所有消息(例如錯誤消息和來自?PRINT?語句的消息)會傳送到?SQL?Server?錯誤日志。如果身份驗證失敗,將不激發(fā)登錄觸發(fā)器。

4.觸發(fā)器工作原理:

觸發(fā)器觸發(fā)時:

????????系統(tǒng)自動在內(nèi)存中創(chuàng)建deleted表或inserted表;

????????只讀,不允許修改,觸發(fā)器執(zhí)行完成后,自動刪除。

inserted表:

????????臨時保存了插入或更新后的記錄行;

????????可以從inserted表中檢查插入的數(shù)據(jù)是否滿足業(yè)務(wù)需求;

????????如果不滿足,則向用戶發(fā)送報告錯誤消息,并回滾插入操作。

deleted表:

????????臨時保存了刪除或更新前的記錄行;

????????可以從deleted表中檢查被刪除的數(shù)據(jù)是否滿足業(yè)務(wù)需求;

????????如果不滿足,則向用戶報告錯誤消息,并回滾插入操作。

5.觸發(fā)器執(zhí)行時機

SQL Server觸發(fā)器有三種執(zhí)行時機:After、For、Instead of

【Ater】與【For】先執(zhí)行增刪改操作,再執(zhí)行觸發(fā)器操作

【Instead of】直接只執(zhí)行觸發(fā)器里的

Instead of觸發(fā)器用來代替通常的觸發(fā)動作,即當對表進行INSERT、UPDATE 或 DELETE 操作時,系統(tǒng)不是直接對表執(zhí)行這些操作,而是把操作內(nèi)容交給觸發(fā)器,讓觸發(fā)器檢查所進行的操作是否正確。如正確才進行相應的操作。因此,INSTEAD OF 觸發(fā)器的動作要早于表的約束處理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容