支持存儲過程是MySQL5中一個很重要的新增特性。雖然有些用戶不希望將反映業務邏輯的流程通過存儲過程封裝在數據庫中,但大多數的數據庫管理人員還是非常喜歡在數據庫中能使用存儲過程這一功能,因為存儲過程有很多好處:
用戶可以重用代碼和更改控制
-和將業務邏輯流程寫入多個應用程序不同的是,用戶只需要寫 一次存儲過程就可以立刻使用許多應用程序來調用該過程,從而實現特定的業務邏輯流程。數據庫管理員也可以通過標准的管理函數來處理不同版本中的數據庫資源,比如數據庫結構 和安全權限等。
可以獲得快速的性能
-管理員可以存儲過程中使用循環結構來執行多個SQL語句,而之前應用程序每次只能執行一條SQL語句,效率明顯得到提高,也可以把復雜的多個SQL語句寫入一個存儲過程,不太熟練SQL語句的用戶可以直接調用該存儲過程,從而避免了在書寫復雜SQL語 句時可能出現的錯誤。
更容易的安全管理特性
-對於一個服務大量不同用戶的復雜數據庫來說,將數量巨大的數據對象的使用權限分配給不同用戶是相當費時的,使用存儲過程以後,就可以在過程級進行權限 分配的任務,比如,當用戶的一個SQL查詢語句需要訪問10張不同的表時,若不用存儲過程, 就需要為該用戶進行10次不同的表許可權限分配,而使用存儲過程後只需要對含有該SQL查詢 語句的存儲過程分配一次許可權限就可以了。
減少了網絡通信流量
-原先通過網絡的多次調用,寫入單個存儲過程中放在服務器端後,進行一次存儲過程調用就可以完成,從而減少了過量的網絡通信流量。
很象DB2數據庫,MySQL5中的存儲過程也完全符合ANSI SQL 2003標准,非常方便開發人員和數據庫管理員學習和使用,而且select查詢語句的返回結果也很直觀,無須專用的調用包和參考游標,這點類似於微軟SQLserver和sybase數據庫,下面是一個關於輸出的例子:
mysql> delimiter //
mysql> create procedure top_broker()
-> select a.broker_id,
-> a.broker_first_name,
-> a.broker_last_n
-> sum(broker_commission) total_commissions
-> from broker a,
-> client_transaction b
-> where a.broker_id=b.broker_id
-> group by a.broker_id,
-> a.broker_first_name,
-> a.broker_last_name
-> order by 4 desc;
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> call top_broker();
為了處理標准的查詢輸出,MySQL5的存儲過程中支持了許多常見的開發構造,比如:
輸入/輸出參數;
變量定義;
帶EXIST檢查的循環;
邏輯條件判斷(if,case等);
條件處理柄;
存儲過程調用存儲過程;
對事務處理類數據庫表的“提交/撤銷”功能支持;
數據定義語句等等。
數據庫開發和管理人員可以通過create,alter,drop,grant來具體操作MySQL5中的存儲過程, 除了獲得元數據的特殊存儲過程,還可以通過如下方法來操作存儲過程:
使用show procedure status函數;
查詢mysql.proc內置表;
使用MySQL5的另一個新特性-information_schema數據字典來實現。