觸發器是一種特殊的儲存過程,不是使用者直接呼叫,而是通過對錶的一些操作觸發的,比如對某個表的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 當你想...