Welcome to 16892 Developer Community-Open, Learning,Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

### MySQL存储过程更新数据后没有立刻刷新

问题描述

mysql 版本

`mysql> status;
mysql Ver 8.0.21 for macos10.15 on x86_64 (MySQL Community Server - GPL)`

mysql 存储过程

CREATE PROCEDURE `init_send_gift_num`(IN min_record_id INT, IN max_record_id INT)
BEGIN
  DECLARE u_id, g_id, g_num INT;
    DECLARE b INT DEFAULT 0;
    DECLARE cur_record CURSOR FOR SELECT watcher_id, gift_id, gift_num FROM recive_gift WHERE id >= min_record_id AND id < max_record_id;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1;
    
    OPEN cur_record;
    FETCH cur_record INTO u_id, g_id, g_num;
    
    WHILE b <> 1 DO        
        UPDATE user_send_gift_num SET total_num = total_num + g_num WHERE user_id = u_id AND gift_id = g_id;
        
        FETCH cur_record INTO u_id, g_id, g_num;
    END WHILE;
    
    CLOSE cur_record;
END

期望结果

使用大表(七千万) recive_gift 的数据去聚合获得 user_id 下 gift_id 的总数,存到 user_send_gift_num 中,思路是一条一条数据读取,之后去累加到 total_num 中去。

实际结果

-- 查询一条 total_num = 0 的记录
SELECT * FROM user_send_gift_num WHERE total_num = 0 LIMIT 1;

-- 然后再按照该记录的联合主键去查询,结果 total_num 不为 0
SELECT * FROM user_send_gift_num WHERE user_id = 10253 AND gift_id = 25;

尝试过的解决方案

以为是工具的问题,然后通过命令行的方式去查询,可以复现
查最大ID一直递增!
SELECT MAX(id) FROM user_send_gift_num ;


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
154 views
Welcome To Ask or Share your Answers For Others

1 Answer

等待大神解答

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to 16892 Developer Community-Open, Learning and Share
...