一、存儲過程介紹:
存儲過程(Stored Procedure)是一組為了完成特定功能的SQL 語句集,經編譯后存儲在數據庫。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。
1.存儲過程只在創造時進行編譯,以后每次執行存儲過程都不需再重新編譯,而 一般SQL 語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速 度。 2.當對數據庫進行復雜操作時(如對多個表進行 Update,Insert,Select,Delete 時),可將此復雜操作用存儲過程封裝起來 與數據庫提供的事務處理結合一起使用。 3.存儲過程可以重復使用,可減少數據庫開發人員的工作量。 4.安全性高,可設定只有某個用戶才具有對指定存儲過程的使用權。
二、使用存儲過程的優缺點:
相對於直接使用SQL 語句,在應用程序中直接調用存儲過程有以下好處:
1.減少網絡通信量:調用一個行數不多的存儲過程與直接調用SQL 語句的網絡通信量可能不會有很大的差別,可是如果存儲過程包含上百行SQL 語句,那么其性能絕對比一條一條的調用SQL 語句要高得多。
2.執行速度更快:有兩個原因:首先,在存儲過程創建的時候,數據庫已經對其進行了一次解析和優化。其次,存儲過程一旦執行,在內存中就會保留一份這個存儲過程,這樣下次再執行同樣的存儲過程時,可以從內存中直接調用。
3.更強的適應性:由於存儲過程對數據庫的訪問是通過存儲過程來進行的,因此數據庫開發人員可以在不改動存儲過程接口的情況下對數據庫進行任何改動,而這些改動不會對應用程序造成影響。
4.分布式工作:應用程序和數據庫的編碼工作可以分別獨立進行,而不會相互壓制。
5.可以防止sql注入。
缺點:
1.如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則您仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣了。
2.可移植性差 由於存儲過程將應用程序綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。
三、存儲過程(stored procedure)、存儲例程(store routine)、存儲函數區別:
Mysql存儲例程實際包含了存儲過程和存儲函數,它們被統稱為存儲例程。