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

MySQL存储过程基础入门与语法使用指南

时间:2026-08-14 22:26
{ "position ":0, "title ": "介绍 ", "layout ": "doc-fullscreen ", "text ": " 介绍nn在本实验中,你将系统学习 MySQL 存储过程的基础用法。实验目标是掌握如何创建、调用、修改以及删除存储过程,并利用它们更高效地管理 MySQL 数据库中的数据。n
{"position":0,"title":"介绍","layout":"doc-fullscreen","text":"## 介绍nn在本实验中,你将系统学习 MySQL 存储过程的基础用法。实验目标是掌握如何创建、调用、修改以及删除存储过程,并利用它们更高效地管理 MySQL 数据库中的数据。nn你将先准备 `employees` 相关的数据环境,然后编写一个名为 `insert_employee` 的 MySQL 存储过程,用于向 `employees` 表插入员工信息。接着,你会学习如何使用 `CALL` 语句执行存储过程,以及如何为过程添加输入参数以提升灵活性。最后,你还将了解如何通过 `DROP PROCEDURE` 语句删除不再需要的过程。nn**注意:** 在本次实验中,你只需要在开始时进入一次 MySQL shell,并在最后统一退出。后续所有 SQL 命令都应在同一个 MySQL 会话中完成,无需在各步骤之间重复连接或断开 MySQL。n","need_verify":false,"has_solution":false},{"position":1,"title":"创建用于插入数据的过程","layout":"doc-workbench-split","text":"## 创建用于插入数据的过程nn在本步骤中,你将学习如何在 MySQL 中创建用于插入数据的存储过程。存储过程本质上是保存在数据库中的预编译 SQL 语句集合,可以通过过程名称重复调用,通常有助于提升执行效率、代码复用性以及数据库操作的安全性。nn首先,打开终端,并使用以下命令连接到 MySQL 服务器:nn```bashnsudo mysql -u rootn```nn该命令会以 `root` 用户身份连接到 MySQL 服务。**请保持当前 MySQL 会话处于打开状态,以便完成后续所有实验步骤。**nn连接成功后,你将进入 MySQL shell。现在切换到已经准备好的 `testdb` 数据库:nn```sqlnUSE testdb;n```nn进入正确的数据库后,我们就可以创建一个向 `employees` 表插入数据的存储过程。MySQL 中通常使用 `CREATE PROCEDURE` 语句来定义存储过程。这里我们将创建一个名为 `insert_employee` 的过程,用来插入一条新的员工记录。nn以下是创建存储过程的 SQL 代码:nn```sqlnDELIMITER //nCREATE PROCEDURE insert_employee (IN employee_name VARCHAR(255), IN employee_department VARCHAR(255))nBEGINn INSERT INTO employees (name, department) VALUES (employee_name, employee_department);nEND //nDELIMITER ;n```nn下面对这段 MySQL 存储过程代码进行说明:nn- `DELIMITER //`:这条命令将语句分隔符从默认的 `;` 临时改为 `//`。由于存储过程定义内部会包含多个分号,因此需要先修改分隔符,告诉 MySQL 将整个过程定义识别为一条完整语句。n- `CREATE PROCEDURE insert_employee`:这表示创建一个名为 `insert_employee` 的存储过程。n- `(IN employee_name VARCHAR(255), IN employee_department VARCHAR(255))`:这里定义了两个输入参数。`employee_name` 表示员工姓名,`employee_department` 表示员工部门,二者的数据类型均为 `VARCHAR(255)`。`IN` 关键字说明它们属于输入参数。n- `BEGIN ... END`:该代码块中包含了调用存储过程时需要执行的 SQL 逻辑。n- `INSERT INTO employees (name, department) VALUES (employee_name, employee_department);`:这条 SQL 语句用于向 `employees` 表写入一条新记录,插入的数据来自传入的两个参数。n- `DELIMITER ;`:执行完过程定义后,将语句分隔符恢复为默认的 `;`。nn这段代码的执行方式很简单,直接复制并粘贴到 MySQL shell 中运行即可。nn执行完成后,你可以在 MySQL shell 中使用下面的命令检查存储过程是否创建成功:nn```sqlnSHOW PROCEDURE STATUS WHERE db = 'testdb' AND name = 'insert_employee';n```nn该命令会显示 `insert_employee` 存储过程的相关信息,例如过程名称、所属数据库以及创建时间等。nn至此,一个用于向 `employees` 表插入员工数据的 MySQL 存储过程就已经创建完成。接下来,你将学习如何调用这个过程。nn在上一步中,你已经成功创建了名为 `insert_employee` 的存储过程。下面这一部分的重点是了解如何通过 `CALL` 语句执行它。nn请确认你仍然位于 MySQL shell 中,并且当前使用的是 `testdb` 数据库。如果不是,可以先执行以下命令切换:nn```sqlnUSE testdb;n```nn`CALL` 语句专门用于执行存储过程,基本语法如下:nn```sqlnCALL procedure_name在这个示例中,存储过程名称为 `insert_employee`,它接收两个参数,分别表示员工姓名和员工所属部门。nn现在,调用 `insert_employee` 过程,插入一条新的员工记录:姓名为“Alice Smith”,部门为“Engineering”:nn```sqlnCALL insert_employee('Alice Smith', 'Engineering');n```nn执行这条语句后,MySQL 会按照传入参数运行 `insert_employee` 存储过程。nn如果你想确认数据是否已成功写入,可以查询 `employees` 表:nn```sqlnSELECT * FROM employees;n```nn查询结果中应该会新增一条记录,姓名为“Alice Smith”,部门为“Engineering”,其中 `id` 字段会自动生成。nn接着,再插入另一位员工,“Bob Johnson”,部门为“Marketing”:nn```sqlnCALL insert_employee('Bob Johnson', 'Marketing');n```nn插入完成后,同样可以再次查询 `employees` 表进行验证:nn```sqlnSELECT * FROM employees;n```nn这时,你应该能看到两条员工记录,一条是“Alice Smith”,另一条是“Bob Johnson”。nn到这里,你已经成功使用 `CALL` 语句调用了存储过程 `insert_employee`,并完成了插入结果验证。这也说明,MySQL 存储过程非常适合封装并复用常见的 SQL 数据操作逻辑。-workbench-split","text":"## 为过程添加输入参数nn在前面的步骤中,你已经创建并调用了名为 `insert_employee` 的存储过程,该过程接收两个输入参数:`employee_name` 和 `employee_department`。在本步骤中,你将继续学习如何为这个 MySQL 存储过程新增一个输入参数,以满足更完整的数据插入需求。nn现在,我们为 `insert_employee` 过程增加一个 `employee_salary` 参数。这样一来,在插入新员工记录时,就可以同时写入员工薪资信息。nn首先,你需要删除现有的存储过程。如果不先删除,重新创建同名过程时 MySQL 会报错。在 MySQL shell 中执行:nn```sqlnDROP PROCEDURE IF EXISTS insert_employee;n```nn现在,重新创建带有新输入参数的修改版存储过程:nn```sqlnDELIMITER //nCREATE PROCEDURE insert_employee (IN employee_name VARCHAR(255), IN employee_department VARCHAR(255), IN employee_salary DECIMAL(10, 2))nBEGINn INSERT INTO employees (name, department, salary) VALUES (employee_name, employee_department, employee_salary);nEND //nDELIMITER ;n```nn下面说明本次修改的重点:nn- 在过程定义中新增了输入参数 `IN employee_salary DECIMAL(10, 2)`。`DECIMAL(10, 2)` 是适合薪资字段的数据类型,表示总共最多 10 位数字,其中包含 2 位小数。n- 同时修改了 `INSERT` 语句,使其在写入 `name` 和 `department` 的基础上,也将 `salary` 列与 `employee_salary` 参数一起插入。nn接下来,调用修改后的 `insert_employee` 存储过程,插入一条新员工数据:姓名为“Charlie Brown”,部门为“Finance”,薪资为 60000.00:nn```sqlnCALL insert_employee('Charlie Brown', 'Finance', 60000.00);n```nn为了验证数据是否已经正确插入,你可以在 MySQL shell 中查询 `employees` 表:nn```sqlnSELECT * FROM employees;n```nn查询结果中应该会出现一条新的员工记录,姓名为“Charlie Brown”,部门为“Finance”,薪资为 60000.00。nn至此,你已经成功为存储过程 `insert_employee` 添加了一个新的输入参数,并验证了数据插入结果。这展示了在实际 MySQL 数据库开发中,如何通过修改存储过程来适配新的业务需求。n","need_verify":true,"has_solution":false},{"position":4,"title":"删除过程","layout":"doc-workbench-split","text":"## 删除过程nn在最后一步中,你将学习如何从数据库中删除一个存储过程。删除后,该过程会从 MySQL 数据库中移除,之后将无法继续被调用。nn**提醒:** 此时你应该仍然位于 MySQL shell 中,并且当前使用的是 `testdb` 数据库。nn`DROP PROCEDURE` 语句专门用于删除存储过程,其基本语法如下:nn```sqlnDROP PROCEDURE [IF EXISTS] procedure_name;n```nn其中,`IF EXISTS` 子句是可选的,但在实际操作中非常推荐使用。这样即使目标过程不存在,也可以避免报错。nn在本示例中,需要删除的过程名称为 `insert_employee`。执行以下命令:nn```sqlnDROP PROCEDURE IF EXISTS insert_employee;n```nn这条语句会将 `testdb` 数据库中的 `insert_employee` 存储过程彻底移除。nn如果你想验证该过程是否已成功删除,可以再次查看过程状态:nn```sqlnSHOW PROCEDURE STATUS WHERE db = 'testdb' AND name = 'insert_employee';n```nn正常情况下,这条命令会返回空结果集,说明该存储过程已经不存在。nn另外,你也可以通过尝试调用该过程来验证删除结果:nn```sqlnCALL insert_employee('Test', 'Test', 1000);n```nn这会返回类似如下的错误信息:`ERROR 1305 (42000): PROCEDURE testdb.insert_employee does not exist`。nn至此,你已经成功删除了存储过程 `insert_employee`。nn**现在你可以通过输入以下命令退出 MySQL shell:**nn```sqlnexitn```nn这也标志着本次关于 MySQL 存储过程创建、调用、修改和删除的实验练习全部完成。n","need_verify":true,"has_solution":false},{"position":5,"title":"总结","layout":"doc-fullscreen","text":"## 总结nn在本实验中,你学习了 MySQL 存储过程的核心基础知识,包括如何围绕 `employees` 表完成存储过程的创建、调用、修改与删除。你使用 `CREATE PROCEDURE` 语句定义了名为 `insert_employee` 的存储过程,并借助它将员工数据插入到 `employees` 表中。与此同时,你也了解了 `DELIMITER` 命令在处理过程定义中分号时的重要作用。nn本实验还介绍了如何为 MySQL 存储过程设置输入参数,包括参数名称与数据类型的定义方式。这使你能够在调用过程时动态传入不同的值,从而让存储过程更加灵活、可复用,也更适合实际数据库开发场景。你还练习了通过 `CALL` 语句执行存储过程并验证数据插入结果,最后掌握了使用 `DROP PROCEDURE` 语句删除存储过程的方法。n","need_verify":false,"has_solution":false}
来源:https://labex.io/zh/tutorials/mysql-mysql-stored-procedures-basics-550915
上一篇MongoDB字段投影用法详解与查询优化技巧 下一篇PostgreSQL全文搜索功能详解与使用指南
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

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

同类最新

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

更多
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运行环境。