關於觸發器的理解

2021-06-16 05:55:30 字數 1552 閱讀 4262

觸發器是一種特殊的儲存過程,不是使用者直接呼叫,而是通過對錶的一些操作觸發的,比如對某個表的insert,update,delete,如果我們在該表中定義了相應的觸發器,那麼觸發器就會執行。

在sql server中,觸發器分為兩種,一是前觸發器(instead of),另一種是後觸發器(after or for).

它們的區別在於:

前觸發器(instead of) 顧名思意,就是代替引起觸發的操作,而去執行觸發器裡面定義的指令碼.

例如:定義表:create talbe a(id int,name varchar(20),create table b(id int,name varchar(20).

定義觸發器:create trigger tri_a

on a  instead of insert as

begin

insert into b select * from inserted

end當我們執行 insert into a (id,name) values (1,'abc) 的時候,該語句就觸發了定義在表的觸發器,從而執行insert into b

select * from inserted ,而不去執行插入表a的操作。其中inserted是個虛擬表,存放在記憶體中,下面會有詳細介紹。

後觸發器(after or for),是指對錶執行了insert,update,delete後,觸發定義在表的觸發器,執行觸發器的指令碼。

例如:定義表:create table products(proid int identity(1,1),proname varchar(20),procount int ,unitprice decimal ,totalprice decimal )

定義觸發器:create trigger computetotalprice

on products for insert as

begin

update products

set  totalprice = procount * unitprice

where proname in (select proname form inserted)

end當我們執行 insert into products (proname,procount,unitprice) values ('food',10,4.5)後,就會觸發定義在products表的觸發器,該觸發器是計算該商品的總價。

在以上的觸發器的指令碼中都用到了虛擬表,inserted,但是還有另一虛擬表deleted,下面總結這兩個表的用途:

1.插入操作(insert)

inserted表有資料,deleted表無資料

2.刪除操作(delete)

inserted表無資料,deleted表有資料

3.更新操作(update)

inserted表有資料(新資料),deleted表有資料(舊資料)

總結:雖然觸發器,本人在實踐中用得比較少,

但是個人認為,

前觸發器用在對某個表操作前,進行一些邏輯處理和判斷,從而判斷是否對該錶進行相應的操作。

後觸發器用在對某個表操作後,進行操作自身和其他表。

關於觸發器

dml觸發器 語句觸發器 當執行dml語句時被隱含執行的觸發器 語法 create or replace trigger t update a event1 or event2 or event3 on table name pl sql block 行觸發器 當執行dml語句時,每作用一行被觸發一...

關於觸發器

觸發器的定義 觸發器是乙個特殊的儲存過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某錶上的觸發器上包含對另乙個表的資料操作,而該操作又會導致該錶觸發器被觸發。觸發器的作用 觸發器是乙個特殊的儲...

關於觸發器

inserted存放進行insert和update操作後的資料,deleted存放進行delete和update操作前的資料,他們是觸發器執行時用到的兩張特殊表,也可以說是種臨時表,是在進行啟用觸發器時由系統自動生成 如你給了資料庫裡兩張表,一張學生表 student 一張成績表 score 當你想...