mysql函数存储过程实现转账操作

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

1.建一个customer表
在这里插入图片描述
2.创建函数存储过程
在这里插入图片描述
3.创建字段
在这里插入图片描述
4.加入事务回滚目的是防止出现查询时,输入了不是数据表内的信息,造成数据丢失的情况,故增加了判断。
4.1 字段名称说明:
in fromid int–转账方;
in toid int–收到转账方;
int pbalance double–转账金额;
out flag varchar—自定义字段,用来提示信息是否转账成功 ,out代表输出
重点在调试过程中,如果有varchar的要手动加"(20)"这样的单位上去,不然会报错
在这里插入图片在这里插入图片描述描述
5.查询调用存储过程事件


5.2
当输入不是数据表内的信息,会触发事务回滚
在这里插入图片描述
6.完整代码

BEGIN
	#Routine body goes here...
 -- 定义一个变量来保存用户的余额
	DECLARE vbalance double;
-- 定义受影响的行的结果	
 DECLARE result int;
  set result=0;
-- 查询余额看下 是否满足转账
select cbalance INTO vbalance FROM customer WHERE cid= fromid;
-- 加入条件判断
 if(vbalance-pbalance>=0)THEN
-- 可以进行转账操作
-- 开启事务
start TRANSACTION;
UPDATE customer set cbalance =cbalance - pbalance WHERE cid = fromid;
-- 记录每次update受影响的行
if(ROW_COUNT()=1)THEN
set result = result+1;
end if;
UPDATE customer set cbalance =cbalance + pbalance WHERE cid = toid;
-- 记录每次update受影响的行
if(ROW_COUNT()=1)THEN
set result = result+1;
end if;
if(result=2)then
-- 提交事务
set flag = '转账成功!';
commit;
ELSE
-- 回滚
set flag='转账失败,事务回滚';
ROLLBACK;
end if;
ELSE
-- 余额不足
SET flag = '转账失败,余额不足';
end if;

END

6.1查询的sql代码

CALL p11(1,3,10,@msg);
SELECT @msg;

select * from customer; 
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值