存儲過程

什麼是存儲過程

  存儲過程是一組爲了完成特定功能的SQL語句集,存儲在數據庫中,通過第一次編譯後再次調用不須要再次編譯,用戶經過指定存儲過程的名字並給出參數(若是該存儲過程帶有參數)來執行它。
  注:存儲過程被編譯後直接保存在到了數據庫,使用時能夠調用直接調用,省去編譯過程,他多是多條SQL語句的集合。數據庫

存儲過程的優勢

  • 效率高。因爲數據庫執行動做時,是先編譯後執行的。然而存儲過程是一個編譯過的代碼塊,因此執行效率要比T-SQL語句高。
  • 減小網絡流量。存儲過程位於服務器上,調用的時候只須要傳遞存儲過程的名稱以及參數就能夠了,所以下降了網絡傳輸的數據量。
  • 重複使用。存儲過程能夠重複使用,從而能夠減小數據庫開發人員的工做量。
  • 方便實施企業規則。能夠把企業規則的運算程序寫成存儲過程放入數據庫服務器,這樣便於集中控制,易於維護。當企業規則修改時只要修改存儲過程就能夠,無需修改其餘應用程序。
  • 安全性。參數化的存儲過程能夠防止SQL注入式攻擊(網絡傳輸時,只是傳輸的存儲過程的名稱和參數,SQL沒法注入),數據庫管理員能夠向訪問數據庫中存儲過程的應用程序授予適當的權限,而不向基礎數據庫表提供任何權限。

存儲過程的缺點

  • 調試麻煩。基本上沒有較好的調試器,不少時候是用print來調試,但用這種方法調試長達數百行的存儲過程簡直是噩夢。
  • 移植性差。不一樣數據庫支持的語言不同,其存儲過程的編寫規則也不同,例如MySQL和SQLserver存儲過程的編寫有不小的差距,因此存儲過程沒法移植到另外一類數據庫。
  • 不能大量使用。若是在一個程序系統中大量的使用存儲過程,到程序交付使用的時候隨着用戶需求的增長會致使數據結構的變化,接着就是系統的相關問題了,最後若是用戶想維護該系統能夠說是很是難、並且代價是空前的,維護起來更麻煩。
  • 沒法適應數據庫的切割(水平或垂直切割)。數據庫切割以後,存儲過程並不清楚數據存儲在哪一個數據庫中。

    關於MySQL存儲過程編寫的一些簡單案例
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息