先說觸發(fā)器,再說好處和壞處 ------------------------------- 觸發(fā)器,主要是用來同步更新數(shù)據(jù)的,雜亂枯燥的文章不給你轉(zhuǎn)了,看起來累,舉個例子吧: 假設(shè)有兩個表,tab_1 , tab_2 再假設(shè)兩個表里都有“人員性別”這個字段 tab_1的數(shù)據(jù)例如: 張三```男```1978`````2002 tab_2的數(shù)據(jù)例如: 張三```男```銷售科```科長 我要改tab_1中張三的性別為“女”的話,那么tab_2的性別也該改為“女”,對吧,總不能兩張表的性別不同吧。 如果不用觸發(fā)器的話,我們就要改完tab_1,再去改tab_2,使性別都變成女 于是這里可以用到觸發(fā)器了: 原理是:當tab_1中某人的性別發(fā)生變更后,數(shù)據(jù)庫自動將tab_2的性別進行同步修改 觸發(fā)器也可以這樣應用: 1、當刪除tab_1中的某人信息時,觸發(fā)器一并刪除該人的tab_2中的數(shù)據(jù) 2、在tab_1中新插入一個人員時,觸發(fā)器在tab_2中一并新增一條該人的數(shù)據(jù) =================================================================================== 所以在你建立觸發(fā)器時,就要指定該觸發(fā)器的用途,是同步更新,還是刪除、插入,由你指定。 基本的語法規(guī)則是: create trigger 觸發(fā)器名稱(你自己命名的) 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表上,建立觸發(fā)器(tri_A),用于刪除該表的數(shù)據(jù)時觸發(fā)一個事務,什么事務呢?——刪除tab_2中的該編號人員的記錄。 FOR INSERT、FOR UPDATE分別是建立用于“插入記錄”、“更新數(shù)據(jù)”的觸發(fā)器,例子里的FOR DELETE是用于觸發(fā)“刪除記錄”的。 這里還要看清楚,那個delete語句中的表,是from deleted哦,還有,where子句的tab_2.id = deleted.id,不是tab_2.id = tab_1.id哦,deleted.id是指你剛刪除的那條記錄的id(而update、insert,都用inserted.id) =================================================================================== 好處:相對于外部程序、存儲過程,觸發(fā)器可以更快更高效的維護數(shù)據(jù) 壞處:(我自己的經(jīng)驗)觸發(fā)器要用的恰到好處,一個大型應用里,觸發(fā)器越少越好,觸發(fā)器會使編程時源碼的結(jié)構(gòu)被迫打亂,為將來的程序修改、源碼閱讀帶來很大不便。 |