游乐游手机版
首页/数据库/文章详情

MySQL创建存储过程语法与步骤详解

时间:2026-08-17 20:20
一、 为什么使用存储过程?简化数据库操作:将多步 SQL 操作封装为一个命令,调用更方便。提升执行效率:一次编译,可重复运行,能够减少网络传输开销。降低出错概率:将业务逻辑集中在 MySQL 存储过程中处理,避免应用程序重复编写代码而产生错误。 二、 创建存储过程的基本语法CREATE PROCED

一、 为什么使用存储过程?

MySQL创建存储过程

简化数据库操作:将多步 SQL 操作封装为一个命令,调用更方便。

提升执行效率:一次编译,可重复运行,能够减少网络传输开销。

降低出错概率:将业务逻辑集中在 MySQL 存储过程中处理,避免应用程序重复编写代码而产生错误。

二、 创建存储过程的基本语法

CREATE PROCEDURE <过程名> ( [过程参数[,…] ] )

BEGIN

<过程体>

END;

1. 过程名 (`<过程名>`)

命名规则与普通标识符基本一致。

建议使用具有明确含义的名称(如 `GetUserOrders`, `CalculateMonthlyRevenue`),便于维护和理解。

不要使用 MySQL 内置函数名作为存储过程名称。

2. 过程参数 (`[IN | OUT | INOUT] <参数名> <类型>`)**

这是 MySQL 创建存储过程时实现灵活调用的关键部分。

参数类型关键字说明补充说明
输入参数IN调用者向存储过程传入参数值(默认模式,可省略)。参数在过程体内部通常是只读的。最常用
输出参数OUT存储过程通过该参数向调用者返回结果。传入的初始值通常会被忽略,在过程体中可写入新值。用于返回结果
输入/输出参数INOUT同时具备 IN 和 OUT 的作用。调用者先传入值,存储过程处理后再返回修改后的值。双向传递


注意:参数名称尽量不要与数据表字段名相同,否则容易引发歧义或不可预知的错误。

3. 过程体 (`<过程体>`)

过程体中包含存储过程需要执行的核心 SQL 语句。

简单的存储过程可以只有一条 SQL 语句。

复杂的过程体则可以包含变量声明、流程控制(IF, CASE, LOOP)以及异常或错误处理等内容。

通常使用 `BEGIN ... END` 组成一个完整的复合语句块。

三、 至关重要的 `DELIMITER` 命令

大家都知道,MySQL 默认在遇到分号 `;` 时就会执行当前语句。但在 MySQL 存储过程的过程体内部,往往会包含多条以 `;` 结尾的 SQL 语句。这样一来,MySQL 就可能在遇到第一个分号时,误判 `CREATE PROCEDURE` 语句已经结束。

解决方法:临时修改命令行客户端中的语句结束分隔符。

操作步骤:

1. 先声明新的分隔符(例如 `//` 或 `$$`)。

DELIMITER //

2. 再编写完整的 CREATE PROCEDURE 语句。此时过程体中的分号 `;` 不会触发提前执行。

CREATE PROCEDURE MyProcedure()

BEGIN

SELECT * FROM table1;

SELECT * FROM table2; -- 这里的分号是安全的

END //

整个存储过程定义以新的分隔符 `//` 结束

3. 最后将分隔符恢复为分号。

DELIMITER ;

四、 创建存储过程示例

例1:创建无参数的存储过程 `ShowStuScore`

(从学生成绩表中查询所有学生成绩)

DELIMITER // 步骤1:修改分隔符

CREATE PROCEDURE ShowStuScore()

BEGIN

过程体中可以写入一条或多条 SQL 语句

SELECT * FROM tb_students_score;

END //

DELIMITER ; 步骤3:恢复分隔符

调用存储过程

CALL ShowStuScore();

例2:创建带有输入(IN)参数的存储过程 `GetScoreByStu`

(根据学生姓名查询对应成绩)

DELIMITER //

CREATE PROCEDURE GetScoreByStu(IN name VARCHAR(30))

BEGIN

SELECT student_score FROM tb_students_score

WHERE student_name = name; -- 这里的 `name` 是参数,不是字段名

END //

DELIMITER ;

调用存储过程并传入参数

CALL GetScoreByStu('Dany');

例3:创建带有输出(OUT)参数的存储过程 `GetMaxScore`

(查询最高分,并通过参数返回结果)

DELIMITER //

CREATE PROCEDURE GetMaxScore(OUT max_score INT)

BEGIN

将查询结果通过 INTO 赋值给输出参数

SELECT MAX(student_score) INTO max_score FROM tb_students_score;

END //

DELIMITER ;

调用存储过程

先定义一个用户变量(@ms)用于接收 OUT 参数返回的值

CALL GetMaxScore(@ms);

查看返回结果

SELECT @ms AS 'Max Score';

五、 权限要求

要在 MySQL 中创建存储过程,当前用户必须拥有 `CREATE ROUTINE` 权限。

以上内容已经覆盖了 MySQL 创建存储过程最基础、最核心的知识点。下一步可以继续深入学习:

1. 变量使用:如何在过程体中定义并使用局部变量(`DECLARE`)。

2. 流程控制:使用 `IF...THEN...ELSE`、`CASE`、`WHILE...DO`、`LOOP` 等实现更复杂的业务逻辑。

3. 查看与删除:可通过 `SHOW PROCEDURE STATUS` 查看存储过程信息,并使用 `DROP PROCEDURE <过程名>` 删除指定存储过程。

来源:https://www.dotcpp.com/course/1591
上一篇MySQL存储过程修改方法与操作步骤 下一篇MySQL创建索引的方法与注意事项
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Redis是什么:核心特性、架构与应用场景解析
数据库 · 2026-09-01

Redis是什么:核心特性、架构与应用场景解析

Redis是一款基于内存的键值型NoSQL数据库,以超高读写速度和丰富的数据结构著称。本文系统梳理Redis的核心特性、架构组成、性能优势及典型应用场景,并通过与Memcached、MySQL、MongoDB的对比,帮助开发者快速判断Redis是否适合当前业务需求。

Windows 安装 MongoDB 完整图文教程
数据库 · 2026-09-01

Windows 安装 MongoDB 完整图文教程

本文详细介绍在 Windows 系统上安装 MongoDB 的完整流程。从官网下载 MSI 安装包开始,逐步演示自定义安装路径、配置 Windows 服务、跳过 MongoDB Compass 等关键选项,并提供通过系统服务列表验证安装是否成功的方法,帮助开发者快速搭建本地 MongoDB 环境。

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动
数据库 · 2026-09-01

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动

本文详解在 Linux 系统下安装 MongoDB 的完整流程,涵盖依赖包安装、二进制包下载解压、环境变量配置、数据与日志目录创建及服务启动验证。通过标准化命令与路径说明,帮助开发者快速完成部署并确认服务状态。

MacOS安装MongoDB完整教程
数据库 · 2026-09-01

MacOS安装MongoDB完整教程

本文介绍在MacOS系统下安装MongoDB的完整流程,涵盖下载、解压、目录配置、环境变量设置及服务启动。通过明确的命令与参数说明,帮助开发者快速完成环境搭建并验证安装结果。

Ubuntu系统安装与配置Redis完整指南
数据库 · 2026-09-01

Ubuntu系统安装与配置Redis完整指南

本文详解在Ubuntu系统中安装Redis的两种主流方式:apt在线安装与源码编译安装。涵盖版本选择逻辑、服务启停与状态检查、连接验证方法,以及在线练习工具与桌面GUI客户端的对比与使用建议,帮助开发者快速搭建并验证Redis运行环境。