首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 5 儲存程序建立與呼叫實戰:從 Hello World 到多結果集處理

     編輯:MySQL 資料庫相關知識

快速上手:建立第一個儲存程序

mysql> USE test;
mysql> CREATE PROCEDURE hi() SELECT 'hello';
mysql> CALL hi();
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.00 sec)

核心優勢:減少網路往返

單次連線即可執行多條 SQL,大幅降低網路延遲開銷。但需注意:

  • 需回傳多個結果集時,必須使用 mysqli 擴展(mysql 舊擴展不支援,會報 can't return a result set in the given context)
  • mysqli::multi_query() + mysqli::next_result() 迴圈處理多結果集

函數與程序的關鍵差異

特性Stored ProcedureStored Function
回傳值無(透過 OUT/INOUT 參數)必須有 RETURNS
呼叫方式CALL sp_name()SELECT func_name()
在 SQL 中使用不可直接用於 SELECT可直接嵌入查詢
事務控制支援 COMMIT/ROLLBACK不支援

進階實戰建議

  1. 參數模式:明確指定 IN/OUT/INOUT,避免隱性 Bug
  2. 決定性聲明:標註 DETERMINISTIC / NO SQL / READS SQL DATA,配合 log_bin_trust_function_creators=1 避免複寫報錯
  3. 錯誤處理:使用 DECLARE ... HANDLER FOR SQLEXCEPTION 捕獲異常
  4. 權限最小化:僅授予 EXECUTE 權限,避免直接授表級 DML

除錯技巧

-- 查看現有程序
SHOW PROCEDURE STATUS WHERE Db='test';

-- 查看程式碼
SHOW CREATE PROCEDURE hi;
儲存程序是資料庫層業務邏輯封裝的利器,善用可大幅提升架構內聚性與效能。現代專案建議搭配 mysqli 或 PDO 使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved