觸發(fā)器的定義
觸發(fā)器(trigger)是SQLserver提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執(zhí)行不是由程序調用,也不是手工啟動,而是由事件來觸發(fā),比如當對一個表進行操作(insert,delete,update)時就會激活它執(zhí)行。觸發(fā)器經常用于加強數據的完整性約束和業(yè)務規(guī)則等。
觸發(fā)器的特點
1.自動執(zhí)行。觸發(fā)器在對表的數據作了任何修改(比如手工輸入或者應用程序的操作)之后立即被激活。
2.級聯(lián)更新。觸發(fā)器可以通過數據庫中的相關表進行層疊更改,這比直接把代碼寫在前臺的做法更安全合理。
3.強化約束。觸發(fā)器可以引用其它表中的列,能夠實現(xiàn)比CHECK約束更為復雜的約束。
4.跟蹤變化。觸發(fā)器可以阻止數據庫中未經許可的指定更新和變化。
5.強制業(yè)務邏輯。觸發(fā)器可用于執(zhí)行管理任務,并強制影響數據庫的復雜業(yè)務規(guī)則。
觸發(fā)器的分類
DML觸發(fā)器
當數據庫中表中的數據發(fā)生變化時,包括insert,update,delete任意操作,如果我們對該表寫了對應的DML觸發(fā)器,那么該觸發(fā)器自動執(zhí)行。DML觸發(fā)器的主要作用在于強制執(zhí)行業(yè)務規(guī)則,以及擴展SqlServer約束,默認值等。因為我們知道約束只能約束同一個表中的數據,而觸發(fā)器中則可以執(zhí)行任意Sql命令。
DDL觸發(fā)器
它是SqlServer2005新增的觸發(fā)器,主要用于審核與規(guī)范對數據庫中表,觸發(fā)器,視圖等結構上的操作。比如在修改表,修改列,新增表,新增列等。它在數據庫結構發(fā)生變化時執(zhí)行,我們主要用它來記錄數據庫的修改過程,以及限制程序員對數據庫的修改,比如不允許刪除某些指定表等。
登錄觸發(fā)器
登錄觸發(fā)器將為響應LOGIN事件而激發(fā)存儲過程。與SQLServer實例建立用戶會話時將引發(fā)此事件。登錄觸發(fā)器將在登錄的身份驗證階段完成之后且用戶會話實際建立之前激發(fā)。因此,來自觸發(fā)器內部且通常將到達用戶的所有消息(例如錯誤消息和來自PRINT語句的消息)會傳送到SQLServer錯誤日志。如果身份驗證失敗,將不激發(fā)登錄觸發(fā)器。
觸發(fā)器的作用
觸發(fā)器的主要作用就是其能夠實現(xiàn)由主鍵和外鍵所不能保證的復雜的參照完整性和數據的一致性。除此之外,觸發(fā)器還有其它許多不同的功能:
觸發(fā)器能夠實現(xiàn)比CHECK語句更為復雜的約束。
?。?)跟蹤變化Auditingchanges
觸發(fā)器可以偵測數據庫內的操作,從而不允許數據庫中未經許可的指定更新和變化。
?。?)級聯(lián)運行(Cascadedoperation)。
觸發(fā)器可以偵測數據庫內的操作,并自動地級聯(lián)影響整個數據庫的各項內容。例如,某個表上的觸發(fā)器中包含有對另外一個表的數據操作(如刪除,更新,插入)而該操作又導致該表上觸發(fā)器被觸發(fā)。
?。?)存儲過程的調用(Storedprocedureinvocation)。
為了響應數據庫更新觸,發(fā)器可以調用一個或多個存儲過程,甚至可以通過外部過程的調用而在DBMS(數據庫管理系統(tǒng))本身之外進行操作。
由此可見,觸發(fā)器可以解決高級形式的業(yè)務規(guī)則或復雜行為限制以及實現(xiàn)定制記錄等一些方面的問題。例如,觸發(fā)器能夠找出某一表在數據修改前后狀態(tài)發(fā)生的差異,并根據這種差異執(zhí)行一定的處理。此外一個表的同一類型(INSERT、UPDATE、DELETE)的多個觸發(fā)器能夠對同一種數據操作采取多種不同的處理。
總體而言,觸發(fā)器性能通常比較低。當運行觸發(fā)器時,系統(tǒng)處理的大部分時間花費在參照其它表的這一處理上,因為這些表既不在內存中也不在數據庫設備上,而刪除表和插入表總是位于內存中??梢娪|發(fā)器所參照的其它表的位置決定了操作要花費的時間長短。
觸發(fā)器的工作原理
由于使表中數據發(fā)生變化的操作有插入、更新和刪除,所以觸發(fā)器可以分為三類:INSERT觸發(fā)器、UPDATE觸發(fā)器和DELETE觸發(fā)器。
1.INSERT觸發(fā)器工作過程
當試圖向表中插入記錄時,INSERT觸發(fā)器(如果有)自動執(zhí)行,此時系統(tǒng)自動創(chuàng)建一個inserted表,新的記錄被添加到觸發(fā)器表和inserted表。
觸發(fā)器可以檢查inserted表,確定是否執(zhí)行觸發(fā)器動作和如何執(zhí)行觸發(fā)器動作。
2.DELETE觸發(fā)器工作過程
當試圖從表中刪除信息時,DELETE觸發(fā)器被觸發(fā),此時系統(tǒng)自動創(chuàng)建一個deleted表,被刪除的行被放置到這個特殊的表中。被刪除的行在觸發(fā)器表中將不再存在。因此,觸發(fā)器表和deleted表之間沒有共同的記錄。
3.UPDATE觸發(fā)器工作過程
UPDATE語句可以看成兩步,刪除一條舊記錄,插入一條新記錄。所以,UPDATE觸發(fā)器被觸發(fā)時,自動創(chuàng)建一個deleted表和一個inserted表,UPDATE語句使原始行移入deleted表,將更新行插入到inserted表中。
評論