1.定義
觸發器(trigger)是sql server 提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表事件相關的特殊的儲存過程,它的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,比如當對乙個表進行操作( insert,delete, update)時就會啟用它執行。觸發器經常用於加強資料的完整性約束和業務規則等。
2.分類
常規型別的觸發器有三種:dml觸發器、ddl觸發器和登入觸發器
(1) dml(資料操作語言,data manipulation language)觸發器
dml觸發器是一些附加在特定表或檢視上的操作**,當資料庫伺服器中發生資料操作語言事件時執行這些操作。sqlserver中的dml觸發器有三種:
a) insert觸發器:向表中插入資料時被觸發;
b) update觸發器:修改表中資料時被觸發;
c) delete觸發器:從表中刪除資料時被觸發。
當遇到下列情形時,應考慮使用dml觸發器:
通過資料庫中的相關表實現級聯更改
防止惡意或者錯誤的insert、update和delete操作,並強制執行check約束定義的限制更為複雜的其他限制。
評估資料修改前後表的狀態,並根據該差異才去措施。
(2) ddl(資料定義語言,data definition language)觸發器
ddl觸發器是當伺服器或者資料庫中發生資料定義語言(主要是以create,drop,alter開頭的語句)事件時被啟用使用,使用ddl觸發器可以防止對資料架構進行的某些更改或記錄資料中的更改或事件操作。
(3) 登入觸發器
登入觸發器將為響應 login 事件而激發儲存過程。與 sql server 例項建立使用者會話時將引發此事件。登入觸發器將在登入的身份驗證階段完成之後且使用者會話實際建立之前激發。因此,來自觸發器內部且通常將到達使用者的所有訊息(例如錯誤訊息和來自 print 語句的訊息)會傳送到 sql server 錯誤日誌。如果身份驗證失敗,將不激發登入觸發器。
3.優缺點
(1)優點
1)強化約束:強制複雜業務的規則和要求,能實現比check語句更為複雜的約束。
2)跟蹤變化:觸發器可以偵測資料庫內的操作,從而禁止資料庫中未經許可的更新和變化。
3)級聯執行:偵測資料庫內的操作時,可自動地級聯影響整個資料庫的各項內容。
4)巢狀呼叫:觸發器可以呼叫乙個或多個儲存過程。觸發器最多可以巢狀32層。
(2)缺點
1)可移植性差。
2)占用伺服器資源,給伺服器造成壓力。
3)執行速度主要取決於資料庫伺服器的效能與觸發器**的複雜程度。
4)巢狀呼叫一旦出現問題,排錯困難,而且資料容易造成不一致,後期維護不方便。
4.例項
insert 觸發器:
在向目標表中插入資料後,會觸發該錶的insert 觸發器,系統自動在記憶體中建立inserted表; 下面的demo中對age加了判斷,如果不滿足判斷資料會進行回滾,插入的資料操作會失敗。
update 觸發器:
在向目標表中更新資料後,會觸發該錶的update 觸發器,系統自動在記憶體中建立deleted表和inserted表,deleted表存放的是更新前的資料,inserted表存放的是更新的資料
delete 觸發器:
在向目標表中刪除資料後,會觸發該錶的delete 觸發器,系統自動在記憶體中建立deleted表,deleted表存放的是刪除的資料。
SqlServer觸發器的使用
首先 說明乙個觸發器使用的場景。1.伺服器0001上的employee表負責儲存公司所有員工的最新資料,新員工入職 員工更換部門以及員工離職等資訊都存在該表中。2.由於業務需求,公司新上了乙個oa系統,為了確保系統正常平穩執行且不影響公司其他伺服器,所以oa系統就部署在了0002伺服器上。3.oa系...
SQLServer觸發器的使用
觸發器建立的 create trigger tg projectname ontable1 after update asupdatetable2 set 工程名 b.工程名 from table2 a,inserted b where a.projid b.id 關於觸發器中inserted和de...
Sql Server觸發器的使用
sql serefesqoxsver為每個觸發器都建立了兩個專用表 inserted表和deleted表。這兩個表由系統來維護,它們存在於記憶體中而不是資料庫中。這兩個表的結構總是與被該觸發器作用的表的結構相同,觸發器執行完成後,與該觸發器相關的這兩個表也被刪除。對錶的操作 inserted邏輯表 ...