MySQL 存储过程创建、调用与核心语法详解
在外部程序(如 PHP)访问数据库时,复杂的业务逻辑若大量夹杂在代码中会导致维护困难。MySQL 存储过程可将业务逻辑封装在数据库中,提高代码可维护性与执行效率。本文详解存储过程的创建语法、调用方式及关键特性。
一、创建 MySQL 存储过程
要创建一个简单的存储过程,需指定过程名、参数列表以及过程体。以下示例演示如何创建名为pr_add 的存储过程,接收两个整型输入参数并返回它们的和。
- 删除已存在的同名存储过程(可选,便于重复测试):
drop procedure if exists pr_add;
- 创建存储过程主体:
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 存储过程创建、调用及核心语法的详细内容,更多关于数据库优化与技术实践的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









