SQL Trigger 觸發器 簡單筆記

2021-04-16 23:41:38 字數 2329 閱讀 6023

sql trigger(觸發器) 簡單筆記

觸發器是一種特殊的

儲存過程,在使用者試圖對指定的表執行指定的資料修改語句時自動執行。microsoft® sql server™ 允許為任何給定的 insert、update 或 delete 語句建立多個觸發器。

1、insert觸發器:可以定義乙個無論何時用insert語句向表中插入資料時都會執行的觸發器。

當觸發insert觸發器時,新的資料行就會被插入到觸發器表和inserted表中。inserted表是乙個邏輯表,它包含了已經插入的資料行的乙個副本。inserted表包含了insert語句中已記錄的插入動作。inserted表還允許引用由初始化insert語句而產生的日誌資料。觸發器通過檢查inserted表來確定是否執行觸發器動作或如何執行它。inserted表中的行總是觸發器表中一行或多行的副本。

日誌記錄了所有修改資料的動作(insert、update和delete語句),但在事務日誌中的資訊是不可讀的。然而,inserted表允許你引用由insert語句引起的日誌變化,這樣就可以將插入資料與發生的變化進行比較,來驗證它們或採取進一步的動作。也可以直接引用插入的資料,而不必將它們儲存到變數中。

簡單例子:

create trigger trg_insert

on jobs    for insert

asdeclare @job_id **allint

select @job_id=a.job_id from jobs a inner join  inserted b on a.job_id=b.job_id

if @job_id=15

begin

raiserror('不能新增',16,8)--觸發器提示資訊

rollback tran--回滾觸發器

end--測試語句

insert into jobs values('test',11,11)

2、update觸發器:

可將update語句看成兩步操作:即捕獲資料前像(before image)的delete語句,和捕獲資料後像(after image)的insert語句。當在定義有觸發器的表上執行update語句時,原始行(前像)被移入到deleted表,更新行(後像)被移入到inserted表。 

觸發器檢查deleted表和inserted表以及被更新的表,來確定是否更新了多行以及如何執行觸發器動作。

可以使用if update語句定義乙個監視指定列的資料更新的觸發器。這樣,就可以讓觸發器容易的隔離出特定列的活動。當它檢測到指定列已經更新時,觸發器就會進一步執行適當的動作,例如發出錯誤資訊指出該列不能更新,或者根據新的更新的列值執行一系列的動作語句。

例子:create trigger tri_update 

on jobs 

for update 

as if update(job_desc) --監視指定列的資料更新的觸發器

begin 

raiserror('job_desc不能修改!',16,8) 

rollback tran 

end 

--測試語句

update jobs

set job_desc='test'

from jobs

where job_id='14'

3、delete觸發器:

當觸發delete觸發器後,從受影響的表中刪除的行將被放置到乙個特殊的deleted表中。deleted表是乙個邏輯表,它保留已被刪除資料行的乙個副本。deleted表還允許引用由初始化delete語句產生的日誌資料。

使用delete觸發器時,需要考慮以下的事項和原則:

l當某行被新增到deleted表中時,它就不再存在於資料庫表中;因此,deleted表和資料庫表沒有相同的行。

l建立deleted表時,空間是從記憶體中分配的。deleted表總是被儲存在快取記憶體中。 

l為delete動作定義的觸發器並不執行truncate table語句,原因在於日誌不記錄truncate table語句。

例子:create trigger tri_delete 

on jobs 

for delete 

as declare @job_id **allint

select @job_id=job_id from deleted 

if @job_id='1' 

begin 

raiserror('錯誤,不能刪除id號為1的記錄!',16,8) 

rollback tran 

end 

測試語句:delete from jobs where job_id=1  

觸發器學習《一》 簡單觸發器建立

1 建立表 create table userinfo id number 10,0 primary key,name varchar2 40 2 建立序列 create sequence userinfo seq start with 1 maxvalue 9999999999 increment...

觸發器簡單小結

首先介紹觸發器的兩個最重要的基礎知識 1 觸發器分為兩種 instead of 和after 觸發器。after 觸發器,顧名思義,就是在你 sql語句 insert,delete,update 執行之後進行的操作。instead of 則是在sql 語句之前,而且並不執行 sql語句。2 sql ...

觸發器簡單介紹

觸發器 根據事件觸發機制自動觸發的一段sql語句。觸發器的主要作用 觸發器分為兩種 資料操作語言觸發器和資料定義語言觸發器 觸發型別包括 insert update delete 兩張主要的表deleted和inserted deleted表 執行delete或update操作時,被刪除的記錄會被移...