MySQL数据篇 (一)存储过程实现简单的数据修改及事务的使用
程序员文章站
2022-07-04 22:46:16
1、需求,手动给会员新增京币,并且添加分配日志,返回修改是否成功 CREATE DEFINER=`jszapi`@`%` PROCEDURE `p_allot_user_coin`(IN `_member_id` int,IN `_coin` int,OUT `_res` tinyint) BEGI ......
1、需求,手动给会员新增京币,并且添加分配日志,返回修改是否成功
create definer=`jszapi`@`%` procedure `p_allot_user_coin`(in `_member_id` int,in `_coin` int,out `_res` tinyint) begin /* 用途:给会员手动分配京币 作者:mo 创建时间:2019-12-16 参数: _member_id : 会员id _coin : 分配京币数量 _res : 执行结果,1表示成功,0表示失败 */ declare err int default 0; #是否有sql错误 declare timestamptmp int;#当前的时间戳 declare memberspidcount int default 0;#会员id对应会员数(用于验证传入会员id是否有误) declare membertableupdatecount int default 0;#更新t_members表影响的行数 declare allottableinsertid int default 0; #插入t_coin_log表的自增id declare continue handler for sqlexception set err=1;#判断是否有sql错误,全局 #开启事务 start transaction; #赋值timestamptmp set timestamptmp=unix_timestamp(); #判断传入会员id是否有误 select count(1) into memberspidcount from t_members where id = _member_id; if memberspidcount = 0 then set _res = 0; else #更新 update t_members set jing_coin = jing_coin + _coin where id = _member_id; #获取更新数 select row_count() into membertableupdatecount; if membertableupdatecount = 0 then set err = 1; end if; #添加分配日志 insert into t_coin_log(`member_id`,`coin`,`type`,`describe`,`create_time`) values(_member_id,_coin,3,'公司分配',timestamptmp); #获取插入的自增id select @@identity into allottableinsertid; if allottableinsertid = 0 then set err = 1; end if; #判断事务是否提交 if err = 1 then set _res = 0; rollback;#回滚事务 else set _res = 1; commit;#提交事务 end if; end if; end
2、查询,存储过程的调用:传入参数(in)直接写需要传入的参数,传出参数(out)需要补全格式为 @变量名,如调用上述过程
#call 过程名(传入参数1,传入参数2,@传出变量),res名称自己取 call p_allot_user_coin(3,100,@res);
3、结果,输出结果 返回定义的修改状态_res值
上一篇: JavaWeb中的MVC 下