觸發器和存儲過程的區別
Ⅰ 存儲過程與觸發器的區別和聯系
我的理解:主要是使用場合不同,還有就是觸發器中不能使用commit(這個應該是約定而不是規定)
存儲過程相當於打包好的sql語法,可以包含復雜的sql操作,在程序調用時只要執行該存儲過程,一句話就可以完成復雜的資料庫操作.
Ⅱ SQL中觸發器、存儲過程
1、觸發器:當向表unit插入的數據後,且objectid>10000時,向表test_tab插入數據
create
trigger
trig1
after
insert
on
unit
for
each
row
when
(objectid>10000)
begin
insert
into
test_tab
values(new.objectid,new.name);
end;存儲過程:向表test插入調用存儲時的參數@id,@namecreate
procere
pro_name
@id,@nameasbegininsert
into
test
values(@id,@name);end;2、兩個區別,通過語法可以看出來,觸發器是在執行了一定的操作後,根據觸發條件,系統自動執行某一操作;而存儲過程則是根據你設定的特定操作,來進行相應的操作而已。3、至於什麼時候用觸發器,什麼時候用存儲過程,這個就要根據你的使用情況了。比如說,在對某張表進行了特定操作後,我們讓系統自動去執行一些操作,這個時候就可以使用觸發器。而存儲過程呢,如果我們在某一個事務中要進行的sql操作特別多,那麼我們就可以把這些sql語句用存儲過程來匯總,達到執行一遍存儲過程就可以執行多條sql命令的目的。另外,你聽說的現在不用觸發器,這點明顯是被誤導了,觸發器和存儲過程是各有優點的。舉個例子,比如說電信的通話記錄,你可以想像每天的數據量有多大,那麼為了保證系統的性能,我們就可以設定觸發器來對表的容量進行限定,比如達到了1000萬條數據,我們可以觸發一個清表的操作,那麼這張表就可以保證數據量始終在1000W以下(這個例子不是很合適,但是可以說明點問題)。之所以有人說不用觸發器,這點也是從資料庫性能來說的,說實話,使用觸發器時,如果設計得不合適,那麼對整個系統的性能會造成很大的影響的,所以在設計資料庫時,一定要慎重。整個產品的性能並不是說代碼優化就行了,資料庫的架構設計也應該考慮在其中。
Ⅲ 資料庫存儲過程、函數、觸發器的區別是什麼
三者差別:
1、存儲過程實現的功能要復雜一點,而函數實現的功能針對性比較強。;
2、存儲過程一般是作為一個獨立的部分來執行,而函數可以作為查詢語句的一個部分來調用;
3、觸發器是特殊的存儲過程,存儲過程需要程序調用,而觸發器會自動執行。
分別含義:
1、存儲過程的特點
①存儲過程只在創建時進行編譯,以後執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
② 當對資料庫進行復雜操作時(如對多個表進行Update、Insert、Query、Delete時),可將此復雜操作用存儲過程封裝起來。
③可以在過程中調用另一個存儲過程。可以在存儲過程中調用函數。這可以簡化一系列復雜語句。
④ 安全性高,可設定只有某用戶才具有對指定存儲過程的使用權。
⑤參數有三種(IN、OUT、IN OUT),可返回多個參數值。
⑥在ORACLE中,若干個有聯系的過程可以組合在一起構成程序包。
⑦存儲過程是資料庫中的一個重要對象,任何一個設計良好的資料庫應用程序都應該用到存儲過程。
2、函數的特點
①函數只有一種參數(IN),只有一條RETURN語句,只能返回單一的值。
②可在SQL語句(DML或SELECT)中調用函數。由於函數可以返回一個表對象,因此它可以在查詢語句中位於FROM關鍵字的後面。
3、觸發器的特點
觸發器是特殊的存儲過程,存儲過程需要程序調用,而觸發器會自動執行。