標籤:觸發器
簡單介紹:
觸發器其實是一種特殊的預存程序,它只有在特定的事件發生時自動執行。預存程序和觸發器都是SQL語句和流程式控制制語句的集合,預存程序通過預存程序的名字被直接調用,而觸發器主要通過時間進行觸發而被執行。
觸發器的分類:
觸發器包括DML觸發器和DDL觸發器。DML觸發器是我們常見的一種觸發器,當資料庫伺服器中發生資料操作語言(DML)事件時會自動執行;DDL觸發器是一種新型的觸發器,它在響應資料定義語言 (Data Definition Language)(DDL)語句時觸發,一般用於資料庫中執行管理工作。今天我們主要研究DML觸發器,它又分為AFTER觸發器和INSTEAD OF觸發器兩類。
AFTER觸發器是記錄已經改變完成之後才被啟用的執行,也就是事件已經結束觸發器才被觸發;INSTEAD OF觸發器是用來取代原本的操作,在事件發生之前觸發,這樣它並不執行原先的SQL語句,而是按照觸發器中的定義操作。
觸發條件:
DML觸發器響應UPDATE、INSERT、DELETE語句而啟用;DDL觸發器響應CREATE、ALTER、DROP、GRANT、DENY、REVOKE、UPDATE以及STATISTICS等語句而啟用。
思維導圖:
建立觸發器:
簡單應用:
以牛腩新聞發布系統中刪除新聞類別同時刪除新聞以及評論為例,這裡因為有外鍵約束,所以刪除新聞類別的同時要刪除該類別的新聞以及評論。由於 AFTER觸發器是記錄已經改變完成之後才被啟用的執行,因此我們用INSTEAD OF觸發器,把之前單純的刪除類別操作替換為刪除評論、新聞以及類別的操作。這樣就不會出現外鍵約束而導致無法刪除的情況了。
<span style="font-family:KaiTi_GB2312;font-size:18px;">-- =============================================-- Author:<邵鴻鑫>-- Create date: <2014-8-18>-- Description:<刪除類別觸發器>-- =============================================ALTER TRIGGER [dbo].[trigCategoryDelete] ON [dbo].[category] instead of DELETEAS BEGINdeclare @caId intselect @caId =id from deleted--刪除評論delete comment where newsId in(select newsId from news where caId [email protected] )--刪除新聞delete news where [email protected] --刪除類別delete category where [email protected] END</span>
觸發器的作用:
1)強制比CHECK約束更複雜的資料的完整性
2)使用自訂的錯誤提示資訊 3)實現資料庫中多張表的級聯修改 4)比較資料庫修改前後資料的狀態 5)調用更多的預存程序 6)維護非正常化資料觸發器的優點還有很多,需要我們到實際應用中去探索,以上有不足之處,希望大家批評指正。