trollolodn icon

#mysql: basic transaction recharge gold game

trollolodn | PRO | 07/11/13 03:04:14 AM UTC | 0 ⭐ | 172 👁️ | Never ⏰ | []
MySQL |

770 B

|

None

|

0 👍

/

0 👎

DROP PROCEDURE IF EXISTS prc_usergold_updategoldbyid;
 
CREATE PROCEDURE prc_usercharacter_updategoldbyid(v_id INT, v_gold BIGINT, OUT v_totalCoin BIGINT, OUT v_result TINYINT)
BEGIN
    DECLARE v_currentGold BIGINT;
    DECLARE v_rs INT;
    SELECT gold INTO v_currentGold FROM usergold WHERE userid = v_id;
    IF v_currentGold + v_rs < 0 THEN
        SET v_result = 0;
        SET v_totalCoin = v_currentGold;
    ELSE
        START TRANSACTION;
            UPDATE usergold SET gold = gold + v_gold WHERE userid = v_id;
            SELECT ROW_COUNT() INTO v_rs;
        IF(v_rs > 0) THEN
            COMMIT;
            SELECT gold INTO v_totalCoin FROM usergold WHERE userid = v_id;
            SET v_result = 1;
        ELSE
            ROLLBACK;
        END IF;
    END IF;
    
END
--test
CALL prc_usergold_updategoldbyid(10, -999, @total, @result);
SELECT @total, @result

Comments