iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL数据篇 (一)存储过程实现简单的数据修改及事务的使用
  • 409
分享到

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

摘要

需求,手动给会员新增京币,并且添加分配日志,返回修改是否成功 CREATE DEFINER=`jszapi`@`%` PROCEDURE `p_allot_user_coin`(IN `_member_id` int,IN `_coin`

需求,手动给会员新增京币,并且添加分配日志,返回修改是否成功

CREATE DEFINER=`jszapi`@`%` PROCEDURE `p_allot_user_coin`(IN `_member_id` int,IN `_coin` int,OUT `_res` tinyint)
BEGIN
         
        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

查询,存储过程的调用:传入参数(IN)直接写需要传入的参数,传出参数(OUT)需要补全格式为 @变量名,如调用上述过程

#CALL 过程名(传入参数1,传入参数2,@传出变量),res名称自己取
CALL p_allot_user_coin(3,100,@res);

结果,输出结果 返回定义的修改状态_res值

您可能感兴趣的文档:

--结束END--

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

本文链接: https://www.lsjlt.com/news/3235.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作