MySQL Stored Procedure

MySQL

MySQL 存储过程(Stored Procedure)是预编译并存储在 MySQL 服务器上的一组 SQL 语句集合,可包含条件判断、循环、变量操作等逻辑,能像调用函数一样被重复调用,本质是数据库端的 “脚本 / 子程序”。简单来说:你可以把常用的、复杂的 SQL 逻辑(比如 “查询用户订单 + 计算金额 + 更新库存”)封装成一个存储过程,后续只需调用这个存储过程的名称,就能自动执行整套逻辑,无需重复编写零散的 SQL。

一、核心特性

  1. 预编译:首次执行时编译,后续调用直接复用编译结果,提升执行效率;

  2. 封装性:将复杂业务逻辑(多步 SQL、流程控制)封装在数据库端,减少应用程序与数据库的交互次数;

  3. 可复用:一次定义,多处(不同应用、不同语言)调用;

  4. 支持流程控制:可使用 IFWHILELOOP 等编程语法,实现复杂逻辑;

  5. 参数传递:支持输入参数(IN)、输出参数(OUT)、输入输出参数(INOUT)。

二、基本语法

1. 创建存储过程

DELIMITER //  -- 临时修改语句结束符(避免与存储过程内的;冲突)
CREATE PROCEDURE 存储过程名([参数列表])
BEGIN
    -- 存储过程体(SQL 语句 + 流程控制)
END //
DELIMITER ;  -- 恢复默认结束符;

2. 调用存储过程

CALL 存储过程名([参数]);

3. 删除存储过程

三、实操示例

示例 1:基础无参存储过程(查询数据)

创建一个查询 “用户表中所有 VIP 用户” 的存储过程:sql

示例 2:带参数的存储过程(更新 + 返回结果)

创建一个 “根据用户 ID 更新积分,并返回更新后积分” 的存储过程:sql

示例 3:带流程控制的存储过程

创建一个 “根据用户等级调整折扣” 的存储过程:sql

四、遇到的问题

使用 root 账号定义存储过程,切主过程中对旧主设置 read only 之后,存储过程仍会执行,可能会导致数据不一致

Last updated