標籤:pre lte content code update arp log 類別 span
簡介:
觸發器事實上是一種特殊的預存程序。它僅僅有在特定的事件發生時自己主動運行。
預存程序和觸發器都是SQL語句和流程式控制制語句的集合,預存程序通過預存程序的名字被直接調用。而觸發器主要通過時間進行觸發而被運行。
觸發器的分類:
觸發器包含DML觸發器和DDL觸發器。DML觸發器是我們常見的一種觸發器,當資料庫server中發生資料操作語言(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)維護非正常化資料觸發器的長處還有非常多。須要我們到實際應用中去探索。以上有不足之處,希望大家批評指正。????
SQL Server觸發器