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

MySQL 5.0 新特性深度解析:存儲過程 (Stored Procedure) 入門教學

     編輯:MySQL 資料庫相關知識

前言:為什麼需要存儲過程?

MySQL 5.0 引入存儲過程、觸發器、視圖等企業級功能。存儲過程是儲存在資料庫端的預編譯 SQL 程式碼塊,具備模組化、可重複使用、減少網路傳輸、跨平台可攜性等優勢。雖然 MySQL 的實作較晚,但遵循 SQL:2003 標準,語法與 Oracle、DB2 相近,學習曲線平緩。

環境準備:啟用 MySQL 5.0 存儲過程支援

安裝或升級至 5.0 後,必須執行權限表升級腳本,否則存儲過程無法運作:

mysql_fix_privilege_tables

或

mysql_install_db

驗證版本:

SELECT VERSION(); -- 應顯示 5.0.x

建立測試環境

CREATE DATABASE db5;
USE db5;
CREATE TABLE t (s1 INT);
INSERT INTO t VALUES (5);

關鍵步驟:更改分隔符 (DELIMITER)

因存儲過程內含多條 SQL 語句 (以分號結尾),預設分號會讓客戶端誤判結束。需先自訂分隔符 (如 //):

DELIMITER //

還原預設:DELIMITER ;

建立第一個存儲過程

CREATE PROCEDURE p1 ()
BEGIN
    SELECT * FROM t;
END //
  • CREATE PROCEDURE:關鍵字。
  • p1:過程名稱 (不區分大小寫,長度限制 64 字元)。
  • ():參數列表 (此處為空,但括號不可省略)。
  • BEGIN ... END:程式主體區塊,包含一或多條 SQL 語句。

完整語法結構範例

CREATE PROCEDURE procedure1 (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 //

此範例展示:參數傳入 (IN)、區域變數宣告 (DECLARE)、流程控制 (IF/ELSE/END IF) 、變數指派 (SET) 及 DML 操作。

呼叫與管理

  • 呼叫: CALL p1();
  • 刪除: DROP PROCEDURE IF EXISTS p1;
  • 查看定義: SHOW CREATE PROCEDURE p1;

命名規範與避坑指南

  • 避免使用內建函數名稱 (如 pi) 命名過程,否則呼叫時需加空格區分:CALL pi ();。
  • 可使用 資料庫名.過程名 避免名稱衝突。
  • MySQL 目前不支援過載 (同名不同參數),同一資料庫內名稱必須唯一。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved