一、什麼是觸發器
1.觸發器是對錶進行插入、更新、刪除操作時自動執行的存儲過程
2.觸發器通常用於強制業務規則
3.觸發器是一種高級約束,可以定義比check等約束更爲複雜的約束
可執行復雜的sql語句(if/while/case)
可引用其它表中的列
4.觸發器定義在特定的表上,與表相關
5.自動觸發執行,不能直接調用
6.是一個事務(可回滾,不能手動提交)
二、觸發器的類型
delete觸發器 當刪除表中記錄時觸發,自動執行觸發器所定義的SQL語句
insert觸發器 當向表中插入數據時觸發,自動執行觸發器所定義的SQL語句
update觸發器 當更新表中某列、多列時觸發,自動執行觸發器所定義的SQL語句
三、 deleted和inserted表
觸發器觸發時
1.系統自動在內存中創建deleted表或inserted表
2.只讀,不允許修改;觸發器執行完後,自動刪除
inserted:用於存儲 INSERT 和 UPDATE 語句所影響的行的副本。
1.在執行INSERT 或 UPDATE 語句時,新加行被同時添加到 inserted 表和觸發器表中,所以inserted表臨時保存了插入或更新後的記錄行
2.可以從inserted中檢查插入的數據是否滿足業務需求,如果不滿足,則向用戶報告錯誤消息,並回滾插入操作
3. 可以執行ROLLBACK TRANSACTION回滾撤銷操作
deleted表:表用於存儲 DELETE 和 UPDATE 語句所影響的行的副本
1.在執行 DELETE 或 UPDATE 語句時,行從觸發器表中刪除,並傳輸到 deleted 表中,所以deleted表臨時保存了刪除或更新前的記錄行
2.可從deleted表中檢查被刪除的數據是否滿足業務需求, 如果不滿足,則向用戶報告錯誤消息,並回滾插入操作
注意:更新(UPDATE)語句類似於在刪除之後執行插入;首先舊行被複制到 deleted 表中,然後新行被複制到觸發器表和 inserted 表中
四、如何創建觸發器
1.創建觸發器的語法
create trigger trigger_name
on table_name
for [delete|insert|update]
as
t-sql語句
go
總結:
觸發器是在對錶進行插入、更新或刪除操作時自動執行的存儲過程,觸發器通常用於強制業務規則
觸發器還是一個特殊的事務單元,當出現錯誤時,可以執行ROLLBACK TRANSACTION回滾撤銷操作
觸發器一般都需要使用臨時表:deleted表和inserted表,它們存放了被刪除或插入的記錄行副本
觸發器類型:INSERT觸發器、UPDATE觸發器、DELETE觸發器
更多: