SQL 觸發器的作用,好處和壞處


觸發器,主要是用來同步更新數據的,舉個例子吧: 

假設有兩個表,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM