概述
Mysql 存储过程是一组预先编译的 sql 语句集合,它们被存储在数据库中,并可以被多次调用执行。存储过程可以接受参数、执行复杂的逻辑操作,并返回结果或修改数据库的状态。
存储过程有以下几个优点:
- 代码复用:存储过程可以将常用的操作逻辑封装起来,以便在多个地方重复使用,避免重复编写相同的 sql 语句。
- 提高性能:存储过程在编译时进行优化,可以减少通信开销,提高数据库的执行效率。
- 安全性:存储过程可以控制对数据库的访问权限,只暴露必要的接口,提高数据的安全性。
- 简化操作:存储过程可以执行复杂的数据库操作,减少客户端与数据库之间的交互次数,简化了客户端的代码。
常见操作
创建存储过程
使用 create procedure 语句来创建存储过程,语法如下:
create
其中,procedure_name是存储过程的名称,parameter_name是存储过程的参数名,data_type是参数的数据类型。 in、out 或 inout 类型解释如下:,分别表示输入参数、输出参数和输入输出参数。
- in :表示当前参数为输入参数,存储过程只是读取这个参数的值。如果没有定义参数种类, 默认就是 in 。
- out :表示当前参数为输出参数,执行完成之后,调用这个存储过程的客户端或者应用程序就可以读取这个参数返回的值。
- inout :表示当前参数既可以为输入参数,也可以为输出参数。
存储过程局部变量定义和赋值
局部变量的定义和赋值,在上一节有提到过,具体可查看:Mysql 变量的使用。
decla
查看存储过程
# 查看
删除存储过程
删除是必修课,在任何一个DDL语句中都必须学习创建和删除,语法如下:
drop procedure [if exists] 存储过程名称;
调用存储过程
使用 call 语句来调用存储过程,procedure_name是存储过程的名称,parameter_value是存储过程的参数值。参数值可以是常量、变量或表达式。
call procedure_name([parameter_value, ...]);
示例
没有任何参数情况
drop pro
存在 in 参数情况
drop proc
存在 out 参数情况
drop pro
存在 in 和 out 参数情况
drop proc
存在 inout 参数情况
drop p
示例-动态数据透视详细讲解
数据准备和需求
准备一张产品销售表,其中产品会随着新品发布会增加,需要是我想要看到区域对应每个产品的金额,并且新增加的产品也要透视。
create t
数据测试和实现
首先,查看现有产品对应区域的金额现状。
select re
其次,我们利用上一节 Mysql 动态 sql ,让代码自动生成要执行的动态 sql 。\n\t
表示换行符和制表符。
# 录入新产品
最后,我们看到上一步拼接的动态 sql 自动添加了新产品 Product D 的汇总情况,这就是我们要执行的,进一步封装成存储过程,简单执行。
drop proce
创建存储过程后,不需要改任何代码,每次只需要 call dynamic_pivot();
就可以轻松查看区域对应的产品金额了。
总结
存储过程是MySQL中一种非常有用的数据库对象,可以提高数据库的性能、代码的复用性和数据的安全性。除了实现动态数据透视,它的作用远不止这些,多去实践操作,我相信你会发现更多妙用。