Mysql—存储过程

简介

存储过程就是类似于MySQL触发器,经过事先编写好相应语句,通过编译后存储在数据库上。触发器不需要手动调用即可实现相应SQL功能。MySQL存储过程,需要自己去调用得到相应的结果。

语法

  • 创建存储过程
CREATE DEFINER = CURRENT_USER PROCEDURE demo()
BEGIN
...编写具体sql语句
END

demo()中,可以添加输入IN、输出OUT,如:

CREATE DEFINER = CURRENT_USER PROCEDURE demo(IN name VARCHAR(20), OUT age int)
BEGIN
...编写具体sql语句
END

这里以Navicat作为演示
在这里插入图片描述
DEFINER = CURRENT_USER 是表示在当前用户创建的存储过程,如果登录名是root,那么这里就是DEFINER=root@%。编写完,保存后就会显示
在这里插入图片描述

  • 调用存储过程
CALL 存储过程名称(存储过程需要参数就传入参数)

在Navicat中可以直接点击运行,可以得到相应结果
在这里插入图片描述
如果是有参数的存储过程,会弹出相应的参数让填写。
在命令行中:
在这里插入图片描述

简单的案例

  1. 查询所有用户的薪资
    在这里插入图片描述
    运行结果:
    在这里插入图片描述

  2. 根据用户名称,查询该用户的薪资

创建存储过程
在这里插入图片描述
在这里插入图片描述
这里需要注意的是:填写完相关参数后,点击完成后,直接保存该存储过程,是无法编译通过的
在这里插入图片描述
这里需要对varchar指定位数
在这里插入图片描述
点击运行,输入参数值
在这里插入图片描述
在这里插入图片描述
这里可以看到结果1为想要查询的结果。这时点开结果2看看,可以发现这个带有@的值就是我们定义的OUT 对应的值,但是为什么为空呢?
在这里插入图片描述
查看我们创建的这个存储过程,可以看到IN 参数有值,但是OUT 参数usalary 还没有值,也就是变量@usalary 目前还是为空的(猜测在Navicat中直接点击运行时,会在输入IN时,也默认给OUT 传入的是null,如果不传,@usalary就是null),既然我们想要输出usalary 含有值,那么就在存储过程sql语句中,将查询的salary 结果赋值给它。

给变量赋值,可以使用into 进行
在这里插入图片描述
再次运行
在这里插入图片描述
在这里插入图片描述
可以看到变量@usalary 已经成功赋值成功。

那么我们进行变量的赋值,有什么用呢?
用户的自定义变量,在mysql中的保存时间为该次mysql的会话连接,在这个会话内,可以一直调用该变量,不需要再去执行存储过程。

在这里插入图片描述
在这里插入图片描述

MySQL的存储过程就先讲到这,后面有需要再更新上来。

可以看看我的个人博客:
网站:https://www.fuzm.wang / https://liwangc.gitee.io
—————————————————————————

作为初学者,很多知识都没有掌握,见谅,如有错误请指出,以期进步,感谢!。后续有新的学习,继续补充上来。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值