【MySQL】(基础篇十七) —— 存储过程

存储过程

本文将介绍什么是存储过程,为什么要使用存储过程以及如何使用存储过程,并且介绍创建和使用存储过程的基本语法。

MySQL的存储过程是预编译的SQL语句集合,它们作为一个可执行单元存储在数据库中。存储过程能够封装复杂的业务逻辑,接受输入参数,输出结果集,甚至返回值,从而提供了一种高效且模块化的方法来执行常见的或复杂的数据库操作。

创建存储过程的基本语法如下:

sql 复制代码
CREATE PROCEDURE procedure_name (IN|OUT|INOUT param1 datatype, ...)
BEGIN
   -- SQL语句集合
   ...
END;
  • CREATE PROCEDURE 是用来创建存储过程的关键字。
  • procedure_name 是存储过程的名称。
  • (IN|OUT|INOUT param1 datatype, ...)参数列表,其中:
    • IN 参数表示传入值到存储过程中。
    • OUT 参数表示从存储过程中传出值。
    • INOUT 参数既可传入也可传出。
    • param1 datatype 定义参数名及其数据类型。
  • BEGIN...END; 包含了存储过程中的SQL语句。

检查存储过程使用SHOW CREATEP ROCEDURE语句

【示例】创建一个存储过程,用于计算员工的平均工资

sql 复制代码
CREATE PROCEDURE `avg_salary`()
BEGIN
  SELECT AVG(salary) as avgsalary
  FROM employees;
 END

和视图一样,存储过程在被创建之后也会被保存到本地,可以随时查看其sql语句

执行存储过程

调用存储过程使用 CALL 语句,因为存储过程实际上是一种函数,所以存储过程名后需要有()符号(即使不传递参数也需要

【示例】执行上面例子中创建的存储过程

sql 复制代码
CALL avg_salary();

运行结果:

删除存储过程

删除存储过程语法如下:

sql 复制代码
DROP PROCEDURE 存储过程名

使用参数

变量(variable)内存中一个特定的位置,用来临时存储数据。

【示例】创建一个带参数的存储过程employeesalary,实现计算员工工资的最高值、最低值和平均值

sql 复制代码
CREATE PROCEDURE employeesalary(
  OUT sl DECIMAL(8,2),
  OUT sh DECIMAL(8,2),
  OUT sa DECIMAL(8,2)
)
BEGIN
  SELECT MIN(salary)
  INTO sl
  FROM employees;
  SELECT MAX(salary)
  INTO sh
  FROM employees;
  SELECT AVG(salary)
  INTO sa
  FROM employees;
END;

调用存储过程,为几个数据创建对应的变量

sql 复制代码
CALL employeesalary(
  @lowsalary,
  @highsalary,
  @avgsalay
);

查询变量中存储的数据:

sql 复制代码
SELECT @lowsalary

运行结果:

【示例】同时使用IN和OUT参数创建存储过程,查询不同manager管理的用户的数量

sql 复制代码
CREATE PROCEDURE managertotal(
  IN manager INT,
  OUT totalpeople INT
)
BEGIN
  SELECT COUNT(manager_id)
  FROM employees
  WHERE manager_id = manager;
END

调用存储过程:

sql 复制代码
CALL managertotal('100', @total);

运行结果:

相关推荐
“αβ”7 小时前
MySQL表的操作
linux·网络·数据库·c++·网络协议·mysql·https
p***s917 小时前
Spring数据库原理 之 DataSource
java·数据库·spring
虹科网络安全7 小时前
艾体宝干货 | Redis Java 开发系列#1 从零开始的环境搭建与实践指南
java·数据库·redis
火山引擎开发者社区7 小时前
火山引擎向量数据库 Milvus 版正式商业化:AI 时代的向量检索新标杆
数据库·milvus·火山引擎
神秘的土鸡8 小时前
openEuler 25.09 企业级 MySQL主从复制部署与性能优化实战提升50%
linux·数据库·mysql·性能优化·openeuler
韩立学长8 小时前
基于Springboot课堂教学辅助系统08922bq1(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
goxingman9 小时前
Oracle视图基础
数据库·oracle
黎相思9 小时前
MySQL索引特性
数据库·mysql
rit843249910 小时前
压缩感知信号恢复算法:OMP与CoSaMP对比分析
数据库·人工智能·算法