SQL觸發器舉例

2021-10-07 02:14:53 字數 4296 閱讀 1075

--1、建立乙個觸發器,針對於teacher表,如果有人要修改教師的姓名,就輸出不能修改教師姓名

create

trigger t_updatename

on teacher --對teacher表起作用

forupdate

--觸發條件,insert,delete

asif

update

(tname)

begin

print

'不能修改教師姓名'

rollback

tran

--事物回滾

end--測試**,驗證觸發器是否有效

update teacher

set tname=

'字串'

where tno=

'0101'

select

*from teacher

where tno=

'0101'

--alter

trigger t_insert

on teacher

forinsert

as--兩張特殊的表,inserted ,deleted(隱藏),記錄剛剛插入或者刪除的記錄

declare

@tno

char(4

)--定義的區域性變數用來儲存從系統表中查出的教師的工號

select

@tno

=tno

from inserted

print

@tno

ifleft

(@tno,2

)!='11'

print

'不能插入該記錄'

rollback

tran

--測試觸發器語句

insert

into teacher

(tno,tname,ttitle)

values

('0997'

,'zifuchuan'

,'教授'

)--2、為productsales資料庫中的產品表建立乙個名為update_pno的update觸發器,

--該觸發器的作用是禁止更新產品表中的「productname」欄位的內容。

--並用update語句修改產品表中第一條記錄為:1 hp1500 印表機 2000

--要求顯示「不能修改產品名稱」的警告資訊。

create

trigger update_pno

on product

forupdate

asif

update

(productname)

begin

print

'不能修改產品名稱'

rollback

tran

end--測試觸發器

update product

set productid=

'1',productname=

'hp1500 印表機'

,price=

'2000'

where productid=

(select

top1 productid

from product)

--3、為factory資料庫中的職工表建立乙個名為update_name的update觸發器,

--該觸發器的作用是禁止更新職工表中的「姓名」欄位的內容。

--並用update語句修改職工表中工號為『2』的職工姓名為「陳晨」,

--要求顯示「不能修改職工姓名」的警告資訊。

alter

trigger update_name

on worker

forupdate

asif

update

(wname)

begin

print

'不能修改職工姓名'

rollback

tran

endupdate worker

set wname=

'陳晨'

where wno=

'2'update worker

set wname=

'孫天奇'

where wno=

'2'--4、為「學生選課資料庫」資料庫中的選課表建立乙個名為update_fenshu的update觸發器,

--該觸發器的作用是禁止更新選課表中的「分數」欄位的內容。並演示用update語句修改「選課」表中第一條記錄為分數改為80:

--要求顯示「不能修改分數」的警告資訊。

use xueshengxuanke

gocreate

trigger update_fenshu

on xuanke

forupdate

asif

update

(result)

begin

print

'不能修改分數'

rollback

transaction

enduse xueshengxuanke

goupdate xuanke

set result=

'80'

where sno=

'090101'

--5、為jieyue資料庫中的「借書記錄」 表建立乙個名為insert_jie的insert觸發器,

--該觸發器的作用是每當借書表插入一條記錄,相應的「圖書」表應該減少1本該書的庫存數量。並用insert語句觸發事件,截圖相應結果。

use jieyue

goalter

trigger insert_jie

on[dbo]

.[borrow]

forinsert

asdeclare

@bid

char(6

)select

@bid

=bid

from inserted

print

@bid

if@bidin(

select bid from books)

begin

update books set num=

(num-1)

where bid=

@bid

enduse jieyue

goinsert

into borrow

(id,bid,lenddate,returndate1)

values

('0001'

,'bsn005'

,'2009-10-10'

,'2009-12-10'

)select

*from books

select

*from borrow

delete

from borrow

where bid=

'bsn005'

update books

set num=

(num+2)

where bid=

'bsn005'

--6、為jieyue資料庫中的「還書記錄」 表建立乙個名為insert_huan的insert觸發器,

--該觸發器的作用是每當還書表插入一條記錄,相應的「圖書」表應該增加1本該書的庫存數量。並用insert語句觸發事件,截圖相應結果。

use jieyue

gocreate

trigger insert_huan

on[dbo].[

return

]for

insert

asdeclare

@bid

char(6

)select

@bid

=bid

from inserted

print

@bid

if@bidin(

select bid from books)

begin

update books set num=

(num+1)

where bid=

@bid

enduse jieyue

goinsert

into

[return

](id,bid,returndate)

values

('0001'

,'bsn005'

,'2009-12-10'

)select

*from books

select

*from

[return

]

sql 觸發器 直接遞迴觸發器

create trigger dbo loving20000 on dbo s for delete asdeclare age int select age sage from deleted delete s where sage age delete from s where sname xq...

sql 觸發器 儲存過程 觸發器(3 3)

1 what?什麼是觸發器 trigger 前兩篇介紹了儲存過程,儲存過程可以理解為sql語句集。那麼觸發器就是一種特殊的儲存過程,也就是一群特殊的sql語句集。特殊在哪?從上文得知,儲存過程是依賴名字才被呼叫的。不僅是儲存過程,我們常用的方法等,大部分也是先知道名字,才能去使用。就像吃飯採用訂外賣...

SQL之觸發器

觸發器是一種不帶引數特殊的儲存過程,有使用者定義,資料庫系統根據一定的條件自動執行 sql觸發器大體上可以分為4種 insert 觸發器 在對錶進行資料錄入的時候觸發 delete 觸發器 刪除表中的資料的時候觸發 instead of 觸發器 此類觸發器建立在檢視之上,用來替代相應的動作,比如de...