觸發器,主要是用來同步更新數據的,舉個例子吧:
假設有兩個表,tab_1 , tab_2
再假設兩個表里都有“人員性別”這個字段
tab_1的數據例如: 張三```男```1978`````2002
tab_2的數據例如: 張三```男```銷售科```科長
我要改tab_1中張三的性別為“女”的話,那么tab_2的性別也該改為“女”,對吧,總不能兩張表的性別不同吧。
如果不用觸發器的話,我們就要改完tab_1,再去改tab_2,使性別都變成女
於是這里可以用到觸發器了:
原理是:當tab_1中某人的性別發生變更后,數據庫自動將tab_2的性別進行同步修改
觸發器也可以這樣應用:
1、當刪除tab_1中的某人信息時,觸發器一並刪除該人的tab_2中的數據
2、在tab_1中新插入一個人員時,觸發器在tab_2中一並新增一條該人的數據
===================================================================================
所以在你建立觸發器時,就要指定該觸發器的用途,是同步更新,還是刪除、插入,由你指定。
基本的語法規則是:
create trigger 觸發器名稱(你自己命名的) on 表 for 用途(delete|update|insert)
as
delete|update|insert語句
----------------------------------------------------------------------
例如:
create trigger tri_A on tab_1 FOR DELETE
AS
delete tab_2 from deleted where tab_2.id = deleted.id;
意思是:在tab_1表上,建立觸發器(tri_A),用於刪除該表的數據時觸發一個事務,什么事務呢?——刪除tab_2中的該編號人員的記錄。
FOR INSERT、FOR UPDATE分別是建立用於“插入記錄”、“更新數據”的觸發器,例子里的FOR DELETE是用於觸發“刪除記錄”的。
這里還要看清楚,那個delete語句中的表,是from deleted哦,還有,where子句的tab_2.id = deleted.id,不是tab_2.id = tab_1.id哦,deleted.id是指你剛刪除的那條記錄的id(而update、insert,都用inserted.id)
===================================================================================
好處:相對於外部程序、存儲過程,觸發器可以更快更高效的維護數據
壞處:(我自己的經驗)觸發器要用的恰到好處,一個大型應用里,觸發器越少越好,觸發器會使編程時源碼的結構被迫打亂,為將來的程序修改、源碼閱讀帶來很大不便
原文轉自:http://hi.baidu.com/angelgirlove/item/4a9eb6de84c6e38e6dce3f1f
