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 ;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论