初學觸發器
2024-07-21 02:07:29
供稿:網友
注冊會員,創建你的web開發資料庫,
這里只打算講解四部分了,也就最簡單、最常用的四部分。
1、觸發器。
定義: 何為觸發器?在sql server里面也就是對某一個表的一定的操作,觸發某種條件,從而執行的一段程序。觸發器是一個特殊的存儲過程。
常見的觸發器有三種:分別應用于insert , update , delete 事件。(sql server 2000定義了新的觸發器,這里不提)
我為什么要使用觸發器?比如,這么兩個表:
create table student( --學生表
studentid int primary key, --學號
....
)
create table borrowrecord( --學生借書記錄表
borrowrecord int identity(1,1), --流水號
studentid int , --學號
borrowdate datetime, --借出時間
returndate datetime, --歸還時間
...
)
用到的功能有:
1.如果我更改了學生的學號,我希望他的借書記錄仍然與這個學生相關(也就是同時更改借書記錄表的學號);
2.如果該學生已經畢業,我希望刪除他的學號的同時,也刪除它的借書記錄。
等等。
這時候可以用到觸發器。對于1,創建一個update觸發器:
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
理解觸發器里面的兩個臨時的表:deleted , inserted 。注意deleted 與inserted分別表示觸發事件的表“舊的一條記錄”和“新的一條記錄”。
一個update 的過程可以看作為:生成新的記錄到inserted表,復制舊的記錄到deleted表,然后刪除student記錄并寫入新紀錄。
對于2,創建一個delete觸發器
create trigger trdstudent
on student
for delete
as
delete borrowrecord
from borrowrecord br , delted d
where br.studentid=d.studentid
從這兩個例子我們可以看到了觸發器的關鍵:a.2個臨時的表;b.觸發機制。
這里我們只講解最簡單的觸發器。復雜的容后說明。
事實上,我不鼓勵使用觸發器。觸發器的初始設計思想,已經被“級聯”所替代