1. 程式人生 > >5分鐘學會MySQL儲存過程_1、定義及應用場景

5分鐘學會MySQL儲存過程_1、定義及應用場景

                                                 儲存過程定義及應用場景

 

一、什麼是儲存過程

       顧名思義,儲存過程(Stored Procedure)就是一組為了完成特定功能的SQL語句的集合,經過編譯之後儲存在資料庫

中,使用者通過指定儲存過程的名字並給定其引數(前提:該儲存過程需要引數)來呼叫執行它。

簡單來說,儲存過程類似於java中的方法,其也可以實現一些比較複雜的邏輯功能。

 

二、為什麼使用儲存過程 ?

       為什麼使用儲存過程,無非就是儲存過程的優勢有哪些,如下:

              ①、儲存過程執行速度快,效率高;

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

                                   儲存過程只在第一次執行時進行編譯,已經通過語法檢查和效能優化,之後的每一次

                            呼叫執行都不需要重新編譯,進而提高效率,而通常使用sql語句進行CURD操作,則需執

                            行一次編譯一次,故速度比較慢。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

              ②、儲存過程增強了sql語言的功能和靈活性,可以實現複雜的邏輯功能;

                           - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

                                   儲存過程中有輸入輸出引數,可以宣告變數,有if、else、 case、while等控制語句,

                           通過編寫儲存過程,可以實現複雜的邏輯功能。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

              ③、儲存過程重用性比較高,透明性,資料一致性;

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

                                   儲存過程儲存在資料庫裡面所以對任何應用來說都可以使用,新的應用只需要呼叫相

                           應的儲存過程就可以得到相應的資料服務。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

              ④、儲存過程可以減少網路流量;

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

                                   一個需要數百行Transact-SQL程式碼的操作由一條執行過程程式碼的單獨語句就可實現,

                           而不需要在網路中傳送數百行程式碼。

                           對於同一個針對資料庫物件的操作,如果這一操作所涉及到的T-SQL語句被組織成一儲存

                           過程,那麼當在客戶機上呼叫該儲存過程時,網路中傳遞的只是該呼叫語句,否則將會是

                           多條SQL語句。從而減輕了網路流量,降低了網路負載。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

              ⑤、儲存過程安全性;

                           - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

                           a、SQL集封裝在一個儲存過程中,有專門的資料庫管理員來統一進行管理,保證安全;

                           b、在網路呼叫過程時,只有對執行過程的呼叫是可見的,無法看到表和資料庫物件名稱,

                                 不能嵌入SQL 語句,有助於避免 SQL 注入攻擊;

                           b、許可權控制,不同使用者不同許可權,避免非授權使用者對資料的訪問,保證資料的安全。                          

                           - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

 

 

三、使用儲存過程的劣勢 

       俗話說,使用儲存過程有優勢,肯定就有其劣勢,缺點,如下:

              ①、開發局限性;

                           - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

                           a、儲存過程的編寫比基本的SQL語句複雜,編寫儲存過程需要更高的技能與經驗;     

                           b、SQL本身是一種結構化查詢語言,儲存過程中,雖然有輸入輸出引數,也可以宣告變數,

                                 也具有有if、else、 case、while等控制語句以及異常處理,但其本質還是面向過程(OP)

                                 的,並不是面向物件(OO)的,面對複雜的業務邏輯,實現還是很困難的。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

              ②、難以除錯與維護不便;

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                                   儲存過程的編寫直接依賴於開發人員,如果業務邏輯改動較多,需要頻繁直接運算元

                           據庫,大量業務降維到資料庫,很多異常不能在程式碼中捕獲,出現問題較難排查,需要數

                           據庫管理人員的幫助,而且基本上沒有較好的偵錯程式,所以除錯很困難。

                           除錯工具:dbForge Studio for MySQL-不推薦

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

              ③、可移植性差;

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                                   首先我們的儲存過程建立在某一資料庫中,只有我們的應用程式繫結其資料庫,才可

                           以進行呼叫,因此使用儲存過程將限制應用程式的可移植性。

                         (如果應用程式的可移植性在您的環境中非常重要,則將業務邏輯封裝在不特定於 RDBMS                                                     的中間層中可能是一個更佳的選擇)

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

              ④、沒辦法應用快取;

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                                   沒辦法應用快取。雖然有全域性臨時表之類的方法可以做快取,但同樣加重了資料庫的

                           負擔。如果快取併發嚴重,經常要加鎖,那效率實在堪憂。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

              ⑤、沒辦法應用快取無法適應資料庫的切割(水平或垂直切割)

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                                   資料庫切割之後,儲存過程並不清楚資料儲存在哪個資料庫中。

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 

 

四、總結

       儲存過程是資料庫儲存的一個重要的功能,但是MySQL在5.0以前並不支援儲存過程,這使得MySQL在應用上大打

折扣。好在MySQL 5.0終於開始已經支援儲存過程,這樣即可以大大提高資料庫的處理速度,同時也可以提高資料庫編

程的靈活性。 

       普通的專案開發中,不建議大量使用儲存過程,對比SQL語句,儲存過程適用於業務邏輯複雜,比較耗時,同時請

求量較少的操作,例如後臺大批量查詢、定期更新等。

       使用場景:

                 1、當一個事務涉及到多個SQL語句時或者涉及到對多個表的操作時可以考慮應用儲存過程;

                 2、在一個事務的完成需要很複雜的商業邏輯時可以考慮應用儲存過程;

                 3、比較複雜的統計和彙總可以考慮應用儲存過程。

 

                       

                             Now ~ ~ ~寫到這裡,就寫完了,如果有幸幫助到你,請記得關注我,共同一起見證我們的成長

 

小結

謝謝觀賞,我叫猿醫生。

猿友推薦:正在奔跑的程式猿