觸發(fā)器有兩個穩(wěn)態(tài),可分別表示二進制數碼0和1,無外觸發(fā)時可維持穩(wěn)態(tài);外觸發(fā)下,兩個穩(wěn)態(tài)可相互轉換,已轉換的穩(wěn)定狀態(tài)可長期保持下來,這就使得觸發(fā)器能夠記憶二進制信息,常用作二進制存儲單元。
本教程操作環(huán)境:windows7系統、SQL Server2016版、Dell G3電腦。
觸發(fā)器(trigger)是SQL server提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執(zhí)行不是由程序調用,也不是手工啟動,而是由事件來觸發(fā),比如當對一個表進行操作(insert,delete,update)時就會激活它執(zhí)行。觸發(fā)器經常用于加強數據的完整性約束和業(yè)務規(guī)則等。
觸發(fā)器作用
1、在寫入數據表前,強制檢驗或轉換數據。
2、觸發(fā)器發(fā)生錯誤時,異動的結果會被撤銷。
3、部分數據庫管理系統可以針對數據定義語言(DDL)使用觸發(fā)器,稱為DDL觸發(fā)器。
4、可依照特定的情況,替換異動的指令(INSTEADOF)。
觸發(fā)器分類
1、ML觸發(fā)器
當數據庫中表中的數據發(fā)生變化時,包括insert,update,delete任意操作,如果我們對該表寫了對應的DML觸發(fā)器,那么該觸發(fā)器自動執(zhí)行。DML觸發(fā)器的主要作用在于強制執(zhí)行業(yè)務規(guī)則,以及擴展SqlServer約束,默認值等。因為我們知道約束只能約束同一個表中的數據,而觸發(fā)器中則可以執(zhí)行任意Sql命令。
2、DDL觸發(fā)器
它是SqlServer2005新增的觸發(fā)器,主要用于審核與規(guī)范對數據庫中表,觸發(fā)器,視圖等結構上的操作。比如在修改表,修改列,新增表,新增列等。它在數據庫結構發(fā)生變化時執(zhí)行,我們主要用它來記錄數據庫的修改過程,以及限制程序員對數據庫的修改,比如不允許刪除某些指定表等。
3、登錄觸發(fā)器
登錄觸發(fā)器將為響應LOGIN事件而激發(fā)存儲過程。與SQLServer實例建立用戶會話時將引發(fā)此事件。登錄觸發(fā)器將在登錄的身份驗證階段完成之后且用戶會話實際建立之前激發(fā)。因此,來自觸發(fā)器內部且通常將到達用戶的所有消息(例如錯誤消息和來自PRINT語句的消息)會傳送到SQLServer錯誤日志。如果身份驗證失敗,將不激發(fā)登錄觸發(fā)器。
觸發(fā)器優(yōu)點
觸發(fā)器可通過數據庫中的相關表實現級聯更改,不過,通過級聯引用完整性約束可以更有效地執(zhí)行這些更改。觸發(fā)器可以強制用比CHECK約束定義的約束更為復雜的約束。與CHECK約束不同,觸發(fā)器可以引用其它表中的列。例如,觸發(fā)器可以使用另一個表中的SELECT比較插入或更新的數據,以及執(zhí)行其它操作,如修改數據或顯示用戶定義錯誤信息。觸發(fā)器也可以評估數據修改前后的表狀態(tài),并根據其差異采取對策。一個表中的多個同類觸發(fā)器(INSERT、UPDATE或DELETE)允許采取多個不同的對策以響應同一個修改語句。
觸發(fā)器的穩(wěn)態(tài)
(1)觸發(fā)器有兩個穩(wěn)態(tài),可分別表示二進制數碼0和1,無外觸發(fā)時可維持穩(wěn)態(tài);
(2)外觸發(fā)下,兩個穩(wěn)態(tài)可相互轉換(稱翻轉),已轉換的穩(wěn)定狀態(tài)可長期保持下來,這就使得觸發(fā)器能夠記憶二進制信息,常用作二進制存儲單元。