定義: 何為觸發器?在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 --在student表中建立觸發器
for update --為什麼事件觸發
as --事件觸發後所要做的事情
if update(studentid)
begin
update borrowrecord
set studentid=i.studentid
from borrowrecord br , deleted d ,inserted i --deleted和inserted臨時表
where br.studentid=d.studentid
end
理解觸發器裡面的兩個臨時的表:deleted , inserted 。注意deleted 與inserted分別表示觸發事件的表「舊的一條記錄」和「新的一條記錄」。
乙個資料庫系統中有兩個虛擬表用於儲存在表中記錄改動的資訊,分別是:
虛擬表inserted 虛擬表deleted
在表記錄新增時 存放新增的記錄 不儲存記錄
修改時 存放用來更新的新記錄 存放更新前的記錄
刪除時 不儲存記錄 存放被刪除的記錄
乙個update 的過程可以看作為:生成新的記錄到inserted表,複製舊的記錄到deleted表,然後刪除student記錄並寫入新紀錄。
對於2,建立乙個delete觸發器
create trigger trdstudent
on student
for delete
asdelete borrowrecord
from borrowrecord br , delted d
where br.studentid=d.studentid
從這兩個例子我們可以看到了觸發器的關鍵:a.2個臨時的表;b.觸發機制。
這裡我們只講解最簡單的觸發器。複雜的容後說明。
事實上,我不鼓勵使用觸發器。觸發器的初始設計思想,已經被「級聯」所替代
資料庫應用 Sqlserver觸發器
下面講在sql sever2000 sybase資料為里設定觸發器的指令碼例項 sql sever2000和sybase的儲存語句是相同的 題目要求 表1和表2的主鍵都是xjh 學籍號 當表1新增,刪除,或者修改資料時,表2自動更新,請用觸發器實現它們?答案 建議在資料庫管理中心直接執行ddl的sq...
Sql Server資料庫觸發器例項講解
別處轉的 定義 何為觸發器?在sql server裡面也就是對某乙個表的一定的操作,觸發某種條件,從而執行的一段程式。觸發器是乙個特殊的儲存過程。常見的觸發器有三種 分別應用於insert update delete 事件。sql server 2000定義了新的觸發器,這裡不提 我為什麼要使用觸發...
資料庫觸發器
觸發器是一種特殊型別的儲存過程,它不同於我們前面介紹過的儲存過程。觸發器主要是通過事件進行觸發而被執行的,而儲存過程可以通過儲存過程名字而 被直接呼叫。當對某一表進行諸如update insert delete 這些操作時,sql server 就會自動執行觸發器所定義的sql 語句,從而確保對資料...