Like Share Discussion Bookmark Smile

J.J. Huang   2020-07-18   MySQL   瀏覽次數:

MySQL - 第二十七章 | 儲存程序(上)

儲存程序(Stored Procedure,簡稱:SP)

迄今為止,使用的大多數SQL語句都是針對一個或多個表的單條語句。並非所有操作都這麼簡單,經常會有一個完整的操作需要多條語句才能完成。

例如,考慮以下的情形:

  • 為了處理訂單,需要核對以保證庫存中有相應的物品。
  • 如果庫存有物品,這些物品需要預定以便不將它們再賣給別的人,並且要減少可用的物品數量以反映正確的庫存量。
  • 庫存中沒有的物品需要訂購,這需要與供應商進行某種交互。
  • 關於哪些物品入庫(並且可以立即發貨)和哪些物品退訂,需要通知相應的客戶。

這顯然不是一個完整的例子,但足以幫助表達我們的意思了。執行這個處理需要針對許多表的多條MySQL語句。此外,需要執行的具體語句及其次序也不是固定的,它們可能會(和將)根據哪些物品在庫存中哪些不在而變化。

怎樣編寫此程式碼?可以單獨編寫每條語句,並根據結果有條件地執行另外的語句。在每次需要這個處理時(以及每個需要它的應用中)都必須做這些工作。

可以建立儲存程序。儲存程序簡單來說,就是為以後的使用而保存的一條或多條MySQL語句的集合。可將其視為批文件,雖然它們的作用 不僅限於批處理。

為什麼要使用儲存程序

既然我們知道了什麼是儲存程序,那麼為什麼要使用它們呢?有許多理由,下面列出一些主要的理由。

  • 通過把處理封裝在容易使用的單元中,簡化複雜的操作。
  • 由於不要求反復建立一系列處理步驟,這保證了資料的完整性。如果所有開發人員和應用程序都使用同一(試驗和測試)儲存程序,則所使用的程式碼都是相同的。這一點的延伸就是防止錯誤。需要執行的步驟越多,出錯的可能性就越大。防止錯誤保證了資料的一致性。
  • 簡化對變動的管理。如果表名、列名或業務邏輯(或別的內容)有變化,只需要更改儲存程序的程式碼。使用它的人員甚至不需要知道這些變化。

這一點的延伸就是安全性。通過儲存程序限制對基礎資料的訪問減少了資料訛誤(無意識的或別的原因所導致的資料訛誤)的機會。

  • 提高性能。因為使用儲存程序比使用單獨的SQL語句要快。
  • 存在一些只能用在單個請求中的MySQL元素和特性,儲存程序可以使用它們來編寫功能更強更靈活的程式碼。

換句話說,使用儲存程序有3個主要的好處,即簡單、安全、高性能。顯然,它們都很重要。不過,在將SQL程式碼轉換為儲存程序前,也必須知道它的一些缺陷。

  • 一般來說,儲存程序的編寫比基本SQL語句複雜,編寫儲存程序需要更高的技能,更豐富的經驗。
  • 你可能沒有建立儲存程序的安全訪問權限。許多資料庫管理員限制儲存程序的建立權限,允許用戶使用儲存程序,但不允許他們建立儲存程序。

儘管有這些缺陷,儲存程序還是非常有用的,並且應該盡可能地使用。

說明:不能編寫儲存程序?你依然可以使用 MySQL將編寫儲存程序的安全和訪問與執行儲存程序的安全和訪問區分開來。這是好事情。即使你不能(或不想)編寫自己的儲存程序,也仍然可以在適當的時候執行別的儲存程序。

結語

儲存程序(Stored Procedure,簡稱:SP),這非常重要,當在處理複雜邏輯、大量資料、批次的時候,常常會使用到,看完這篇文章後,其實這邊沒有對SP做出很深入的講解,僅簡單的說明和基本使用。

因為「編寫儲存程序需要更高的技能,更豐富的經驗」這是無庸置疑的,像我對這塊就不是⋯⋯哈。

註:以上參考了
MySQL必知必会 MySQL Crash Course