觸發器例項

2021-05-23 20:40:40 字數 3696 閱讀 4806

sql server 觸發器例項

基本語法:(幫助裡的語法太長了)

create trigger [triggername]

on [tablename]

for [insert][,delete][,update]

as--觸發器要執行的操作語句.

go注意:

觸發器中不允許以下 transact-sql 語句:

alter database ,create database,disk init,

disk resize, drop database, load database,

load log, reconfigure, restore database,

restore log

觸發器語句中使用了兩種特殊的表:deleted表和inserted表。

deleted 表用於儲存 delete 和 update 語句所影響的行的複本。在執行 delete 或 update 語句時,行從觸發器表中刪除,並傳輸到 deleted 表中。deleted 表和觸發器表通常沒有相同的行。

inserted 表用於儲存 insert 和 update 語句所影響的行的副本。在乙個插入或更新事務處理中,新建行被同時新增到 inserted 表和觸發器表中。inserted 表中的行是觸發器表中新行的副本。

1.插入操作(insert)

inserted表有資料,deleted表無資料

2.刪除操作(delete)

inserted表無資料,deleted表有資料

3.更新操作(update)

inserted表有資料(新資料),deleted表有資料(舊資料)

1.) 建立測試用的表(testtable)

if exists (select * from sysobjects where id = object_id(n'testtable') and objectproperty(id, n'isusertable') = 1)

drop table testtable

gocreate table testtable(testfield varchar(50))

2.) 建立基於表(testtable)的觸發器(testtrigger)

if exists (select name from sysobjects where name = 'testtrigger' and type = 'tr')

drop trigger testtrigger

gocreate trigger testtrigger

on testtable

for insert,delete,update

asif exists(select * from inserted)

if exists(select * from deleted)

print '...更新'

else

print '...插入'

else

if exists(select * from deleted)

print '...刪除'

go3.) 操作testtable表,測試觸發器testtrigger

分別執行insert into語句,update語句,delete語句,看看效果

insert into testtable values ('testcontent!')

update testtable set testfield = 'updatecontent'

delete from testtable

0

0sql觸發器例項1

我為什麼要使用觸發器?比如,這麼兩個表:

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

as delete borrowrecord

from borrowrecord br , delted d

where br.studentid=d.studentid

從這兩個例子我們可以看到了觸發器的關鍵:a.2個臨時的表;b.觸發機制。

sql觸發器例項2

觸發器例項

建立乙個插入操作的觸發器 當向學生選課表sc中插入一條記錄後,變更在學生表student對應學生的選課門數。create trigger stu in onsc 對哪個表或者檢視進行操作 forinsert 設定觸發條件,也就是在什麼情況下會觸發這個觸發器 asupdate student sets...

mysql條件觸發器例項 mysql觸發器例項一則

例子,例項學習mysql觸發器的用法。一,準備二張測試表 1,測試表1 複製 示例 drop table if exists test create table test id bigint 11 unsigned not null auto increment,name varchar 100 n...

mysql觸發器例項

mysql從5.0開始支援觸發器 語法 create trigger 觸發器名稱 on 表名稱 for each row 觸發器sql語句 注意 在mysql中現在還不支援利用call來呼叫儲存過程 示例 比如有論壇的版塊表和文章表,乙個版塊中有多篇文章,在版塊表中有乙個字段用來記錄版塊下的文章數。...