mysql存储过程的使用详解
温馨提示:
本文最后更新于 2022年11月06日,已超过 731 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
哈喽我的宝,今天我们一起来学习一下存储过程,采用轻量级的数据库MySQL,如有错误欢迎大家留言指正。
今天主要采用存储过程来实现银行转账操作
一、定义/概念
存储过程简单来说就是将过程化SQL
存储下来方便多次重复使用
过程化SQL突破了传统SQL的局限性,可以进行复杂的逻辑操作
基本结构
采用CREATE PROCEDURE
关键字 后面节存储过程名称
所有的SQL和逻辑判断语句都写在BEGIN
和 END
之间,就类似于我们在c语言中定义函数的花括号{}
CREATE PROCEDURE 存储过程名称()
BEGIN
这里写业务逻辑和SQL
END
二、存储过程的特点
1、存储过程可以进行复杂的业务逻辑处理
2、存储过程可以接受参数,也可以有回传值
三、存储过程的使用
准备工作
创建一个银行账户表
#创建一个账户表
create TABLE t_account (id int(10) PRIMARY KEY,accoutNum int(20),accountName VARCHAR(20),balance FLOAT)
#向表中插入两条信息
insert into t_account values
(1,2202001,"小炸药",100.0),
(2,2202002,"小陈",200.0)
3.1无参存储过程
3.1.1创建存储过程
#创建一个无参数的存储过程
CREATE PROCEDURE p_test1()
BEGIN
SELECT * FROM t_account;
END
3.1.2 调用存储过程
call p_test1();
3.1.3 运行结果
3.2 有参存储过程
3.2.1 创建存储过程
#创建一个有参数的存储过程
#in代表传入的参数,out代表接受返回结果的
CREATE PROCEDURE p_test2(in a_name VARCHAR(20))
BEGIN
SELECT * FROM t_account where accountName=a_name;
END
3.2.2调用存储过程
call p_test2("小炸药");
3.2.3 运行结果
四、银行转账实例演示
简单的存储过程学完了那就上一个复杂的案例,通过存储过程来实现一个银行转账的过程
1、判断转出账户是否存在
2、判断转入账户是否存在
3、判断转出账户的余额是否充足
4、更新两个账户的存款
4.1 创建存储过程
CREATE PROCEDURE p_transfer(
in outName VARCHAR(20),
in inName varchar(20),
in amount FLOAT)
label:BEGIN
/*声明两个变量*/
DECLARE depositeOut FLOAT; #转出账户存款
DECLARE depositeIn FLOAT; #转入账户存款
/*通过查询表为两个变量赋值*/
SELECT balance INTO depositeOut #将查询出的结果使用定义的depositeOut变量来接收
FROM t_account
where accountName = outName;
SELECT balance INTO depositeIn
FROM t_account
WHERE accountName = inName;
/*判断转出账户是否存在*/
IF depositeOut IS NULL THEN
LEAVE label; #相当于return label是在begin出声明的
/*判断转入账户是否存在*/
END IF;
IF depositeIn IS NULL THEN
LEAVE label;#相当于return label是在begin处声明的
END IF;
/*账号余额充足,执行转账操作*/
IF depositeOut > amount THEN
UPDATE t_account set balance = balance + amount where accountName = inName;
UPDATE t_account set balance = balance - amount where accountName = outName;
ELSE
LEAVE label;
END IF;
END;
4.2执行存储过程
4.2.1转账前
4.2.2 传入不符合条件的值
转账金额为500,账户余额不足
call p_transfer("小炸药","小陈",500);
没有执行转账操作
转出账户【小张】不存在
call p_transfer("小张","小陈",9.9);
没有执行转账操作
4.2.3传入符合条件的值
call p_transfer("小炸药","小陈",9.9);
转账成功,两个账户的余额发生变化
五、总结
存储过程将许多逻辑判断以及多条SQL封装到一起了,并且存储起来,方便日后重复且快速的调用。
今天的分享就到这里,初次学习如有错误,欢迎指正。
正文到此结束
- 本文标签: MySQL
- 本文链接: https://www.it1997.com/article/73
- 版权声明: 本文由小陈没烦恼原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权