在上一篇部落格中我們學習總結了預存程序,今天我們學習一種特殊的預存程序——觸發器。顧名思義,觸發器,就是通過某個事件一觸發它就會執行。現在我們還從它的概述,實現和管理三個方面來總結。
一,概述:
1,概念:觸發器是一種特殊類型的預存程序,它在插入,刪除或修改特定表中的資料時觸發執行。
通常可以執行一定的商務規則,以保持資料的完整性,檢查資料的有效性,實現資料庫
管理工作和一些附加的功能。看這張圖,我們會更明白些!
2,優點:a,觸發器自動執行;b,可以調用預存程序;c,可以強化資料條件的約束;d,可以禁止或復原
違反參考完整性的更改;e,級聯,並行運行;d,同表多觸發器。
3,分類:a,DML(Data Manipulation Language,資料操縱語言)觸發器,是在執行資料操作語言事件被
調用時觸發的,其中insert,update和delete,alter等類型。
b,DLL(Dynamic Link Library,動態連結程式庫)觸發器,是由資料定義事件引起的,包括:create
,alter和drop語句。
二,實現觸發器:
1,建立:a,MDL觸發器
T-SQL文法:
create trigger [schema_name.] trigger_name on{table|view}
[with <dml_trigger_option>[,……n]]
{for |after |instead of } {[insert],[update],[delete]} [with append]
[not for replication] as sql_statement[,……n]
文法說明:schema_name DML觸發器所屬架構的名稱;Trigger_name 觸發器的名稱;
<dml_trigger_option>參數項,encryption和execute as選項;with append
指定應該再添加一個現有類型的觸發器。Not for replication ,表示當觸
及觸發器時,不應執行觸發器。
b,DLL觸發器
T-SQL文法:
create trigger_name on {allserver|database}
[with <dll_trigger_option>[,……n]]
{for|after} {event_type|event_group}[,……n]
as sql_statement[,……n]
說明:all_server|database,DDL觸發器響應的範圍,當前伺服器或當前資料庫。
event_type|event_group,T-SQL語言事件的名稱或事件組的名稱。
2,查看:a,查看觸發器的文本資訊sp_helptext
b,查看觸發器的相關性資訊sp_depends
c,一般資訊:sp_help
這裡查看觸發器和上篇部落格中查看預存程序一模一樣,因為它就是特殊的預存程序。
三,管理觸發器
1,修改:這裡修改兩種觸發器就是將建立它的文法中的create改成alter既可以。
2,刪除:drop trigger
3,啟用和禁用:alter table語句用於啟用和禁用觸發器
文法:alter table table {enable|disable}trigger,其中enable為啟用,disable為禁用
4,使用嵌套觸發器:利用sp_configure
文法:sp_configure [[@configname=]'name] [,[@configvalue=]'value']
說明:@configname:配置選項的名稱。
@configvalue當為0時為禁止嵌套,1為允許嵌套
5,建立列級觸發器:使用update來建立
文法:if update (colum1) and|or update(column2)]
6,遞迴觸發器:自行調用自身為遞迴觸發器。其中又分為直接遞迴和間接遞迴。
當然這些操作都可以通過MicrosoftSQL Server Management Studio來直接設定,他跟預存程序中很多東西相同,我們可以通過實踐來學習很多。
觸發器是資料庫中比較進階的應用,靈活使用觸發器可以大大增強應用程式的健壯性,資料庫的可恢複性和資料庫的可管理性。當然,只要我們能夠靈活的運用,我們可以利用它實現一些複雜的功能,簡化開發步驟,降低開發成本,增加開發效率,提高資料庫的可靠性。