觸發器學習(二)

2021-05-01 19:06:11 字數 2179 閱讀 7692

學習觸發器的幾個知識點

1.觸發器是一種transact_sql 命令集,他作為乙個物件儲存在資料庫中

2.inserted和deleted表

每個觸發器都有兩個特殊的表:inserted和deleted表,這兩個表式邏輯表,由系統建立和維護,存在記憶體中,而不是存在資料庫中的

因此,不允許使用者直接對其修改。它們是唯讀的。

inserted表存放由執行insert和update語句而要向表中插入的所有行。

deleted表存放由執行delete和update語句要向表中刪除的所有行。

3.觸發器分類:sql分類:

ddl—資料定義語言(create,alter,drop,declare)

dml—資料操縱語言(select,delete,update,insert)

dcl—資料控制語言(grant,revoke,commit,rollback)

ddl觸發器可用於管理任務,例如審核和控制資料庫操作。ddl的作用主要有以下幾個方面:

1.防止對資料庫架構進行某些更改

2.希望資料庫發生某些情況以響應資料庫架構中的更改。

3.記錄資料庫架構中的更改或事件

dml中的after觸發器和instead of觸發器的區別

instead of 觸發器用來代替通常的觸發動作,即當對錶進行insert、update 或 delete 操作時,系統不是直接對錶執行這些操作,而是把操作內容交給觸發器,讓觸發器檢查所進行的操作是否正確。如正確才進行相應的操作。因此,instead of 觸發器的動作要早於表的約束處理。

instead of 觸發器的操作有點類似於完整性約束。在對資料庫的操縱時,有些情況下使用約束可以達到更好的效果,而如果採用觸發器,則能定義比完整性約束更加複雜的約束。有關觸發器與約束的比較,請參見聯機叢書。

instead of 觸發器不僅可在表上定義,還可在帶有乙個或多個基表的檢視上定義,但在作為級聯引用完整性約束目標的表上限制應用。

after 觸發器定義了對錶執行了 insert、update 或 delete 語句操作之後再執行的操作。比如對某個表中的資料進行了更新操作後,要求立即對相關的表進行指定的操作,這時就可以採用 after 觸發器。after 觸發器只能在表上指定,且動作晚於約束處理。

每乙個表上只能建立乙個 instead of 觸發器,但可以建立多個 after 觸發器。

例項:

instead of 觸發器:

向表「計0261」插入資料時,檢查學號是否存在於表「計026」中,如存在則進行插入操作,否則就不插入。

sql code

create trigger [checkid] on [dbo].[計0261] 

instead of insert

asif not exists(select * from 計026 where 學號=(select 學號 from inserted))

begin

rollback transaction

print '要處理記錄的學號不存在!'

endelse

begin

insert into 計0261 select * from inserted

print '已經成功處理記錄!'

end

after 觸發器:

對訂貨表設定 after(for) 型別的 insert 觸發器,用來在插入記錄時自動將統計值計算到訂貨統計表中。

sql code

create trigger [orderinsert] on [dbo].[訂貨表]

after insert

asdeclare @bookid int, @ordernum int, @num int

select @bookid = 書籍編號, @ordernum = 數量 from inserted

select @num = count(書籍編號) from 訂貨統計表 where 書籍編號=@bookid

if @num = 0

--未找到該書,插入記錄

insert into 訂貨統計表 values(@bookid, @ordernum)

else

--找到該書,更新記錄

update 訂貨統計表

set 總訂貨量 = 總訂貨量 + @ordernum where 書籍編號 = @bookid

觸發器學習

觸發器學習 查詢觸發器 select table owner,table name,trigger body from user triggers 刪除觸發器 drop trigger trigger name 但觸發器一般是這樣建的 create or replace 也就是如果存在的話,就可以替...

觸發器學習

1 觸發器概念 2 觸發器與儲存過程的唯一區別是觸發器不能執行execute語句呼叫,觸發器為自動觸發。2 建立簡單觸發器 create trigger dbo aa on dbo aaaa for insert delete,update astruncate table bbbb insert ...

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

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