在資料庫開發領域,存儲過程是提升效能與封裝業務邏輯的關鍵技術。本文將系統性地講解 MySQL 存儲過程的核心概念、創建語法、參數類型、變量使用、註釋規範以及調用與查詢方法,助您掌握這項強大的資料庫編程技能。
存儲過程是一組為了完成特定功能的 SQL 語句集合,經過編譯後存儲在資料庫中。用戶通過指定存儲過程的名稱並提供參數(如有)來調用執行。它可以被視為資料庫中的可編程函數,由 SQL 語句和特殊控制結構組成。當需要在不同應用程序或平台上執行相同功能,或封裝特定業務邏輯時,存儲過程極具價值。它模擬了面向對象編程的思想,允許控制數據的訪問方式。
存儲過程是資料庫的重要功能,但 MySQL 5.0 之前並不支持,這大幅限制了其應用。MySQL 5.0 正式引入存儲過程支持,極大提升了資料庫處理速度和編程靈活性。
基本格式:
CREATE PROCEDURE 過程名 ([過程參數[,...]]) [特性 ...] 過程體
經典示例:
mysql> DELIMITER //
mysql> CREATE PROCEDURE proc1(OUT s int)
-> BEGIN
-> SELECT COUNT(*) INTO s FROM user;
-> END
-> //
mysql> DELIMITER ;
DELIMITER // 聲明當前段分隔符,讓 MySQL 將「;」視為過程體代碼,結束後用 DELIMITER ; 恢復。注意:使用 MySQL Administrator 等管理工具時可直接創建,無需聲明。IN(輸入)、OUT(輸出)、INOUT(輸入輸出)三種。多個參數用逗號分隔。BEGIN 和 END 標識開始與結束。調用時必須指定值,過程內修改不會返回。
CREATE PROCEDURE demo_in_parameter(IN p_in int)
BEGIN
SELECT p_in;
SET p_in=2;
SELECT p_in;
END;
執行結果驗證: 過程內 p_in 雖修改為 2,但外部變量 @p_in 仍保持 1,確認輸入參數不可回傳修改。
值可在過程內改變並返回。
CREATE PROCEDURE demo_out_parameter(OUT p_out int)
BEGIN
SELECT p_out;
SET p_out=2;
SELECT p_out;
END;
執行結果驗證: 初始 @p_out=1,調用後過程內先顯示 NULL(未初始化),再顯示 2,最終外部變量 @p_out 變為 2,確認輸出生效。
調用時指定,可被改變並返回。
CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int)
BEGIN
SELECT p_inout;
SET p_inout=2;
SELECT p_inout;
END;
執行結果驗證: 初始 @p_inout=1,調用後過程內先顯示 1 再顯示 2,最終外部變量變為 2,雙向傳遞生效。
DECLARE variable_name[,variable_name...] datatype [DEFAULT value];
支持類型:int、float、date、varchar(length) 等。
DECLARE l_int int unsigned default 4000000; DECLARE l_numeric number(8,2) DEFAULT 9.95; DECLARE l_date date DEFAULT '1999-12-31'; DECLARE l_datetime datetime DEFAULT '1999-12-31 23:59:59'; DECLARE l_varchar varchar(255) DEFAULT 'This will not be padded';
SET 變量名 = 表達式值 [,variable_name = expression...]
@ 開頭(如 @x、@greeting)。SELECT 'Hello World' INTO @x; 或 SET @y='Goodbye Cruel World';@last_procedure 記錄上一個執行的過程名。支持兩種風格:
CREATE PROCEDURE proc1 --name存儲過程名
(IN parameter1 INTEGER)
BEGIN
DECLARE variable1 CHAR(10);
IF parameter1 = 17 THEN
SET variable1 = 'birds';
ELSE
SET variable1 = 'beasts';
END IF;
INSERT INTO table1 VALUES (variable1);
END //
調用語法: CALL 過程名(參數列表); 參數根據定義傳入輸入/輸出/輸入輸出值。
查詢存儲過程: 可通過 SHOW PROCEDURE STATUS 或查詢 information_schema.ROUTINES 表獲取元數據信息。
掌握 MySQL 存儲過程,能讓您在資料庫層面高效封裝業務邏輯、提升系統性能、增強安全性。實戰中請結合具體業務場景靈活應用上述技術要點。