1、觸發(fā)器
定義: 何為觸發(fā)器?在SQL Server里面也就是對某一個表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器是一個特殊的存儲過程。
常見的觸發(fā)器有三種:分別應(yīng)用于Insert , Update , Delete 事件。(SQL Server 2000定義了新的觸發(fā)器,這里不提)
我為什么要使用觸發(fā)器?比如,這么兩個表:
Create Table Student( --學(xué)生表
StudentID int primary key, --學(xué)號
....
)
Create Table BorrowRecord( --學(xué)生借書記錄表
BorrowRecord int identity(1,1), --流水號
StudentID int , --學(xué)號
BorrowDate datetime, --借出時間
ReturnDAte Datetime, --歸還時間
...
)
用到的功能有:
1.如果我更改了學(xué)生的學(xué)號,我希望他的借書記錄仍然與這個學(xué)生相關(guān)(也就是同時更改借書記錄表的學(xué)號);
2.如果該學(xué)生已經(jīng)畢業(yè),我希望刪除他的學(xué)號的同時,也刪除它的借書記錄。
等等。
這時候可以用到觸發(fā)器。對于1,創(chuàng)建一個Update觸發(fā)器:
Create Trigger truStudent
On Student
for Update
As
if Update(StudentID)
begin
Update BorrowRecord
Set StudentID=i.StudentID
From BorrowRecord br , Deleted d ,Inserted i
Where br.StudentID=d.StudentID
end
理解觸發(fā)器里面的兩個臨時的表:Deleted , Inserted 。注意Deleted 與Inserted分別表示觸發(fā)事件的表“舊的一條記錄”和“新的一條記錄”。
一個Update 的過程可以看作為:生成新的記錄到Inserted表,復(fù)制舊的記錄到Deleted表,然后刪除Student記錄并寫入新紀(jì)錄。
對于2,創(chuàng)建一個Delete觸發(fā)器
Create trigger trdStudent
On Student
for Delete
As
Delete BorrowRecord
From BorrowRecord br , Delted d
Where br.StudentID=d.StudentID
從這兩個例子我們可以看到了觸發(fā)器的關(guān)鍵:A.2個臨時的表;B.觸發(fā)機(jī)制。
這里我們只講解最簡單的觸發(fā)器。復(fù)雜的容后說明。
事實(shí)上,我不鼓勵使用觸發(fā)器。觸發(fā)器的初始設(shè)計(jì)思想,已經(jīng)被“級聯(lián)”所替代.
posted on 2008-04-18 16:09
學(xué)習(xí)才能進(jìn)步 閱讀(192)
評論(0) 編輯 收藏 引用 所屬分類:
SQL