資料庫基礎 觸發器

2021-06-19 11:18:28 字數 3458 閱讀 2071

觸發器是在對錶進行插入、更新或刪除操作時自動執行的儲存過程

觸發器通常用於強制業務規則

觸發器是一種高階約束,可以定義比 check 約束更為複雜的約束

可執行複雜的 sql 語句(if/while/case)

可引用其它表中的列

觸發器定義在特定的表上,與表相關

自動觸發執行

不能直接呼叫

是乙個事務(可回滾)

觸發器的型別

1.after 觸發器

在執行了 insert、update 或 delete 語句操作之後執行 after 觸發器。after觸發器只能在表上指定。

delete 觸發器

insert 觸發器

update 觸發器

2.instead of 觸發器

在指定的操作(insert、update 或 delete 語句)之前被執行,它的功能是不執行指定的操作,而是執行 instead of 觸發器中定義的操作。可以在表和檢視上定義

instead of 觸發器。每張表或檢視上只能為每個觸發動作(insert, update, or delete)建立乙個 instead of 觸發器。

delete 觸發器

insert 觸發器

update 觸發器

觸發器觸發時:

系統自動在記憶體中建立 deleted 表或 inserted 表

唯讀,不允許修改;觸發器執行完成後,自動刪除

inserted 表

臨時儲存了插入或更新後的記錄行

可以從 inserted 表中檢查插入的資料是否滿足業務需求

如果不滿足,則向使用者報告錯誤訊息,並回滾插入操作deleted 表

臨時儲存了刪除或更新前的記錄行

可以從 deleted 表中檢查被刪除的資料是否滿足業務需求

如果不滿足,則向使用者報告錯誤訊息,並回滾刪除操作

inserted 和 deleted 表存放的資訊

create table [dbo].[bank]

(  [id] [int] identity(1,1) not null,

[cardid] [char](10) not null,

[transtype] [char](4) null,

[currentmoney] [money] null,

[transmoney] [money] null

)create table [dbo].[transinfo]

(  [cardid] [char](10) not null,

[transtype] [char](4) null,

[transmoney] [money] null

)--insert觸發器例項

create trigger trig_transinfo

on transinfo

for insert

asdeclare @type char(4),@outmoney money

declare @mycardid char(10),@balance money

select @type=transtype,@outmoney=transmoney,@mycardid=cardid

from inserted

if (@type='支取')

update bank

set currentmoney=currentmoney-@outmoney,

transtype=@type,transmoney=@outmoney where cardid=@mycardid

else

update bank

set currentmoney=currentmoney+@outmoney,transtype=@type,transmoney=@outmoney where cardid=@mycardid

goinsert into bank values('123456','',1000,'')

insert into transinfo values('123456','支取',200)

insert into transinfo values('123456','存款',10000)

--delete觸發器

create trigger trig_delete_transinfo

on transinfo

for delete

asprint '開始備份資料,請稍後......'

if not exists(select * from sysobjects where name='backuptable')

select * into backuptable from deleted

else

insert into backuptable select * from deleted

print '備份資料成功,備份表中的資料為:'

delete from transinfo

select * from backuptable

go--update觸發器

create trigger trig_update_bank

on bank

for update

asdeclare @beforemoney money,@aftermoney money

select @beforemoney=currentmoney from deleted

select @aftermoney=currentmoney from inserted

if abs(@aftermoney-@beforemoney)>20000

begin

print '交易金額:'+convert(varchar(8),

abs(@aftermoney-@beforemoney))

raiserror ('每筆交易不能超過萬元,交易失敗',16,1)

rollback transaction

endinsert into transinfo values('123456','支取',20001)

觸發器小結

1.如果乙個表的外來鍵在 delete、update 操作上定義了級聯,則不能在該錶上定義instead of delete、instead of update 觸發器

2.如果定義檢視時使用了 with check option,則不允許在其上建立 instead of 觸發器

3.觸發器是「後過濾器」,它在資料修改通過所有規則、預設值之後才執行

4.首先考慮使用約束維護資料庫完整性,僅在必要時才使用觸發器

5.觸發器是在對錶進行插入、更新或刪除操作時自動執行的儲存過程,觸發器通常用於強制業務規則

6.觸發器還是乙個特殊的事務單元,當出現錯誤時,可以執行 rollback transaction回滾撤銷操作

資料庫之 觸發器 基礎

觸發器概述 特殊程式 與函式和儲存過程類似,都屬於pl sql塊 不可以直接呼叫,只能是某種事件觸發 分類 ddl觸發器 dml觸發器 instead of觸發器 替代某個動作的觸發器 系統觸發器 對系統訪問進行控制 觸發器body部分不可以超過32760位元組 一般情況下,非系統觸發器是不能直接呼...

資料庫基礎之觸發器

1.定義 觸發器 trigger 是與表事件相關的特殊的儲存過程,它的執行是由事件來觸發。觸發器經常用於加強資料的完整性約束和業務規則等。2.觸發器和儲存過程的區別 觸發器與儲存過程的唯一區別是觸發器不能執行execute語句呼叫,而是在使用者執行transact sql語句時自動觸發執行。3.作用...

資料庫觸發器

觸發器是一種特殊型別的儲存過程,它不同於我們前面介紹過的儲存過程。觸發器主要是通過事件進行觸發而被執行的,而儲存過程可以通過儲存過程名字而 被直接呼叫。當對某一表進行諸如update insert delete 這些操作時,sql server 就會自動執行觸發器所定義的sql 語句,從而確保對資料...