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