觸發器是1種特殊類型的存儲進程,它不同于之前的我們介紹的存儲進程。觸發器主要是通過事件進行觸發被自動調用履行的。而存儲進程可以通過存儲進程的名稱被調用。
? 甚么是觸發器
觸發器對表進行插入、更新、刪除的時候會自動履行的特殊存儲進程。觸發器1般用在check束縛更加復雜的束縛上面。觸發器和普通的存儲進程的區分是:觸發器是當對某1個表進行操作。諸如:update、insert、delete這些操作的時候,系統會自動調用履行該表上對應的觸發器。SQL Server 2005中觸發器可以分為兩類:DML觸發器和DDL觸發器,其中DDL觸發器它們會影響多種數據定義語言語句而激起,這些語句有create、alter、drop語句。
DML觸發器分為:
1、 after觸發器(以后觸發)
a、 insert觸發器
b、 update觸發器
c、 delete觸發器
2、 instead of 觸發器 (之前觸發)
其中after觸發器要求只有履行某1操作insert、update、delete以后觸發器才被觸發,且只能定義在表上。而instead of觸發器表示其實不履行其定義的操作(insert、update、delete)而僅是履行觸發器本身。既可以在表上定義instead of觸發器,也能夠在視圖上定義。
觸發器有兩個特殊的表:插入表(instered表)和刪除表(deleted表)。這兩張是邏輯表也是虛表。有系統在內存中創建者兩張表,不會存儲在http://www.jyygyx.com/db/中。而且兩張表的都是只讀的,只能讀取數據而不能修改數據。這兩張表的結果總是與被改觸發器利用的表的結構相同。當觸發器完成工作后,這兩張表就會被刪除。Inserted表的數據是插入或是修改后的數據,而deleted表的數據是更新前的或是刪除的數據。
對表的操作 |
Inserted邏輯表 |
Deleted邏輯表 |
增加記錄(insert) |
寄存增加的記錄 |
無 |
刪除記錄(delete) |
無 |
寄存被刪除的記錄 |
修改記錄(update) |
寄存更新后的記錄 |
寄存更新前的記錄 |
Update數據的時候就是先刪除表記錄,然后增加1條記錄。這樣在inserted和deleted表就都有update后的數據記錄了。注意的是:觸發器本身就是1個事務,所以在觸發器里面可以對修改數據進行1些特殊的檢查。如果不滿足可以利用事務回滾,撤消操作。
? 創建觸發器
語法