当前位置: 移动技术网 > IT编程>数据库>Mysql > MySQL数据篇 (一)存储过程实现简单的数据修改及事务的使用

MySQL数据篇 (一)存储过程实现简单的数据修改及事务的使用

2019年12月18日  | 移动技术网IT编程  | 我要评论

卧室设计,刘静文,色情游戏

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值

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网