MySQL 存储过程更新不及时

新手上路,请多包涵

### 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 ;

阅读 1.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题