MySQL 存储过程更新不及时

发布于 2022-09-12 04:44:24 字数 1363 浏览 31 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文