简介
存储过程就是类似于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中可以直接点击运行,可以得到相应结果
如果是有参数的存储过程,会弹出相应的参数让填写。
在命令行中:
简单的案例
-
查询所有用户的薪资
运行结果:
-
根据用户名称,查询该用户的薪资
创建存储过程
这里需要注意的是:填写完相关参数后,点击完成后,直接保存该存储过程,是无法编译通过的
这里需要对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
—————————————————————————
作为初学者,很多知识都没有掌握,见谅,如有错误请指出,以期进步,感谢!。后续有新的学习,继续补充上来。