標籤:
情境:使用者餘額變動時,更新(插入)到流水表,並且記錄到日誌表中,但這裡是先插入日誌,如果成功再進入下一步。
知識點:
1、不存在則更新,存在則插入;
2、交易回復與提交、異常
3、文法學習
調試方式:CALL SP_UPDATE_OR_INSERT(3,1,"使用者儲值",‘10‘);
BEGIN DECLARE t_error int DEFAULT 0; DECLARE usercount int DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error = 1; START TRANSACTION; #插入使用者儲值日誌表 INSERT INTO user_balance_log(user_id,log_type,log_des,log_value) values (_user_id,_log_type,_log_des,_log_value); #代表日誌表插入成功 IF ROW_COUNT() > 0 THEN #尋找使用者是否存在表中 SELECT COUNT(*) INTO usercount from user_balance where user_id = _user_id; #如果存在則更新,否則就插入 IF usercount > 0 THEN UPDATE user_balance SET user_money = user_money + _log_value WHERE user_id = _user_id; ELSE INSERT INTO user_balance(user_id,user_money) VALUES (_user_id,_log_value); END IF; END IF; #判斷錯誤 if t_error = 1 THEN ROLLBACK; #復原 ELSE COMMIT; #提交 END IF; END
mysql 預存程序