萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 存儲過程入門教程:語法規範、合法語句、變量聲明與異常處理

教學約定

  • 代碼區塊採用等寬字體,模擬 mysql> 客戶端輸出。
  • 範例均在 MySQL 5.0.3 / SUSE Linux 測試通過,適用 Windows/Sparc/HP-UX 等平台。
  • 長程式碼保留關鍵註釋,可直接複製執行。

一、 存儲過程體中合法的 SQL 語句

類別說明範例
DMLINSERT, UPDATE, DELETE, SELECT, REPLACECREATE PROCEDURE p() DELETE FROM t;
DDL (MySQL 延伸)CREATE, DROP, ALTER 等CREATE PROCEDURE p() DROP TABLE t;
事務控制SET, COMMIT, ROLLBACKCREATE PROCEDURE p() SET @x = 5;
直接 SELECT (MySQL 延伸)無需 INTO 變量,直接回傳結果集CREATE PROCEDURE p() SELECT 'a';

標準 SQL 將 DDL 定義為可選組件,MySQL 納入核心支援。

二、 新增 SQL 語句:變量聲明

複合語句 (BEGIN ... END) 中使用 DECLARE 定義區域變量:

CREATE PROCEDURE p8()
BEGIN
    DECLARE a INT;
    DECLARE b INT;
    SET a = 5;
    SET b = 5;
    INSERT INTO t VALUES (a);
    SELECT s1 * a FROM t WHERE s1 >= b;
END;//

變量僅在 BEGIN/END 區塊內有效 (類似形參)。

三、 異常處理機制

場景:記錄外鍵違規失敗

-- 建立主表與從表 (InnoDB 支援外鍵)
CREATE TABLE t2 (s1 INT, PRIMARY KEY (s1)) ENGINE=InnoDB;
CREATE TABLE t3 (s1 INT, KEY (s1),
    FOREIGN KEY (s1) REFERENCES t2(s1)) ENGINE=InnoDB;

-- 嘗試插入不存在的外鍵值
INSERT INTO t3 VALUES (5);
-- ERROR 1216 (23000): Cannot add or update a child row: a foreign key constraint fails

建立錯誤日誌表

CREATE TABLE error_log (error_message CHAR(80));

後續將示範:

  • DECLARE ... HANDLER 捕獲特定錯誤碼 (如 1216)。
  • 在 Handler 中 INSERT INTO error_log ... 記錄錯誤資訊。
  • 使用 RESIGNAL / SIGNAL (5.5+) 重新拋出或自定義錯誤。

完整異常處理範例請參考後續進階章節。

copyright © 萬盛學電腦網 all rights reserved