当前位置: 首页 > news >正文

Mysql之存储过程

MySQL 存储过程(Stored Procedure)

1. 概念

存储过程是一组预编译的 SQL 语句集合,可以通过调用名称来执行。存储过程可以接收参数,并支持复杂的业务逻辑(如条件语句、循环、异常处理等)。它们可以提高代码的可重用性和维护性。

2. 创建存储过程

使用 CREATE PROCEDURE 语句创建存储过程。基本语法如下:

CREATE PROCEDURE procedure_name (IN param1 INT, OUT param2 VARCHAR(100))
BEGIN-- SQL statements
END;
  • procedure_name 是存储过程的名称。
  • IN 参数用于输入,OUT 参数用于输出。
示例

创建一个存储过程来计算员工的平均薪资并返回:

DELIMITER \\CREATE PROCEDURE GetAverageSalary(OUT avg_salary DECIMAL(10, 2))
BEGINSELECT AVG(salary) INTO avg_salary FROM employees;
END\\DELIMITER ;
3. 调用存储过程

使用 CALL 语句来调用存储过程:

CALL GetAverageSalary(@avg_salary);
SELECT @avg_salary;
4. 存储过程的参数

存储过程可以有三种类型的参数:

  • IN:输入参数,存储过程内部可以使用这些参数。
  • OUT:输出参数,返回结果给调用者。
  • INOUT:既可以作为输入参数,也可以作为输出参数。
示例

创建一个存储过程,计算某个部门的平均薪资:

DELIMITER \\CREATE PROCEDURE GetDepartmentAverageSalary(IN dept_name VARCHAR(100), OUT avg_salary DECIMAL(10, 2))
BEGINSELECT AVG(salary) INTO avg_salaryFROM employeesWHERE department = dept_name;
END\\DELIMITER ;

调用方式:

CALL GetDepartmentAverageSalary('HR', @avg_salary);
SELECT @avg_salary;
5. 删除存储过程

使用 DROP PROCEDURE 语句删除存储过程:

DROP PROCEDURE procedure_name;
示例

删除刚才创建的存储过程:

DROP PROCEDURE GetAverageSalary;
6. 使用存储过程的优点
  • 提高性能:存储过程是预编译的,可以减少 SQL 解析的开销。
  • 封装业务逻辑:将复杂的业务逻辑封装在存储过程中,便于管理和维护。
  • 减少网络流量:通过一次调用执行多个 SQL 语句,减少客户端与数据库的交互。
7. 注意事项
  • 调试困难:存储过程的调试可能比简单 SQL 查询更复杂。
  • 版本控制:存储过程的版本管理和变更可能需要额外的注意。
  • 安全性:存储过程可以提供额外的安全性控制,但不当使用可能导致 SQL 注入等安全问题。
http://www.lryc.cn/news/504102.html

相关文章:

  • XV6 开发环境搭建
  • Windows 系统下 Python 环境安装
  • VMware Workstation的有线连接消失了
  • 73页车企大数据平台规划与数据价值挖掘应用咨询项目方案解读
  • MIF格式详解,javascript加载导出 MIF文件示例
  • 若依实现图片上传时自动添加水印
  • 用于日语词汇学习的微信小程序+ssm
  • 【信息系统项目管理师】高分论文:论信息系统项目的范围管理(融媒体发布系统)
  • Kaggler日志--Day5
  • VScode MAC按任意键关闭终端 想要访问桌面文件
  • 小粑记故乡的记忆
  • git使用小记
  • Python实现办公自动化——自动编写word文档
  • 番外篇 | BGF-YOLO:引入双层路由注意力、广义特征金字塔网络和第四检测头,提高YOLOv8检测性能
  • Python运维自动化之字典Dict
  • axios请求拦截器和响应拦截器,封装naive-ui的 Loading Bar加载条和useMessage消息提示
  • 9.Python 条件语句和循环语句
  • 智能家居控制系统设计
  • Windows系统word插入公式自动编号并交叉引用
  • 0.基础语法
  • mysql命令行界面(黑框)的登录
  • 【机器学习】解构概率,重构世界:贝叶斯定理与智能世界的暗语
  • threejs——无人机概念切割效果
  • electron学习笔记(一)
  • 基于Arduino蹲便器的自动清洁系统(论文+源码)
  • 【JavaWeb后端学习笔记】使用HttpClient发送Http请求
  • 2024告别培训班 数通、安全、云计算、云服务、存储、软考等1000G资源分享
  • 【C++】- 掌握STL List类:带你探索双向链表的魅力
  • 基于streamlit搭简易前端页面
  • Harmony Next开发通过bindSheet绑定半模态窗口