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 ~ ~ ~寫到這裡,就寫完了,如果有幸幫助到你,請記得關注我,共同一起見證我們的成長。
小結
謝謝觀賞,我叫猿醫生。
猿友推薦:正在奔跑的程式猿