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操作時,被刪除的記錄會被移...