存储过程(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;