MySQL 存储过程创建、调用与核心语法详解

Dylan
Dylan
发布时间:2026-10-15| 5人浏览过
原创

在外部程序(如 PHP)访问数据库时,复杂的业务逻辑若大量夹杂在代码中会导致维护困难。MySQL 存储过程可将业务逻辑封装在数据库中,提高代码可维护性与执行效率。本文详解存储过程的创建语法、调用方式及关键特性。

一、创建 MySQL 存储过程

要创建一个简单的存储过程,需指定过程名、参数列表以及过程体。以下示例演示如何创建名为 pr_add 的存储过程,接收两个整型输入参数并返回它们的和。
  1. 删除已存在的同名存储过程(可选,便于重复测试):
drop procedure if exists pr_add;
  1. 创建存储过程主体:
create procedure pr_add
(
    a int,
    b int
)
begin
    declare c int;
    
    -- 处理空值情况,将 NULL 视为 0
    if a is null then
        set a = 0;
    end if;
    
    if b is null then
        set b = 0;
    end if;
    
    set c = a + b;
    select c as sum;
    
    /* 注意:不能在 MySQL 存储过程中直接使用 return 关键字返回值,
       return 仅在自定义函数(Function)中有效。此处通过 SELECT 输出结果。 */
end;

二、调用 MySQL 存储过程

使用 CALL 语句调用存储过程。可以直接传入常量值,也可以先赋值给用户变量再传入。

1. 直接传入常量参数:

call pr_add(10, 20);

2. 使用 MySQL 用户变量调用:

set @a = 10;
set @b = 20;
call pr_add(@a, @b);

三、MySQL 存储过程核心特点与语法规范

了解以下关键点有助于避免常见错误,特别是从其他数据库迁移或初学时:

第 1 步:理解基础语法结构

创建存储过程的标准语法如下。即使没有参数,括号 () 也是必须的。

CREATE PROCEDURE 存储过程名字()
(
    [IN | OUT | INOUT] 参数名 数据类型
)
BEGIN
    -- MySQL 语句
END;
  • 参数模式:如果不显式指定 IN、OUT 或 INOUT,默认值为 IN。习惯上,输入参数通常不写 IN。
  • AS 关键字:MySQL 不需要 在 BEGIN 前加 AS 关键字。这是与 SQL Server 的主要区别之一(SQL Server 必须加 AS)。

第 2 步:遵循命名与变量规范

  • 参数命名:参数名称前 不能 加 @ 符号。@ 仅用于客户端用户变量,在定义存储过程参数时应直接使用普通变量名。
  • 局部变量:在过程体内部定义的变量无需 @ 前缀,但必须先使用 DECLARE 声明。

第 3 步:掌握代码编写细节

  • 无默认值:MySQL 存储过程的参数不支持设置默认值。调用时必须提供所有参数,若无需传递特定值,可使用 NULL 代替。
  • 结束符号:过程体内的每条语句末尾都必须以分号 ; 结尾。
  • 复合语句块:若包含多条语句,必须使用 BEGIN ... END 包裹。
  • 注释写法:支持多行注释 /* ... */ 和单行注释(两种风格):
    - -- 空格后跟内容(标准 SQL 风格,注意双横线后需有空格)
    - # 后跟内容(MySQL 特有风格)
  • 返回值限制:存储过程中不能使用 RETURN 关键字来返回结果集,RETURN 仅用于函数。若需返回数据,请使用 SELECT 语句。

第 4 步:正确调用与验证

调用时务必保留括号。若过程无参,写为 CALL process_name();。由于不支持参数默认值,省略参数会导致报错,需确保参数数量一致。

以上就是 MySQL 存储过程创建、调用及核心语法的详细内容,更多关于数据库优化与技术实践的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。