qq_36080323 2020-05-28 09:14 采纳率: 80%
浏览 160
已采纳

mysql 怎么不使用游标的方式 , 将结果按条件进行批量更新 。

CREATE DEFINER=root@% PROCEDURE pro_upGrade()
BEGIN
declare sort_a int;
DECLARE classId int;
DECLARE compInfoId int;
DECLARE graduationYear int;
declare flag int default true;
declare curl cursor for SELECT tc.class_id ,tc.comp_info_id ,tg.sort,CAST(tc.graduation_year as SIGNED) graduation_year from t_class tc LEFT JOIN t_grade tg on tg.grade_id=tc.grade;
declare continue handler for not found set flag = false;
OPEN curl;
repeat
FETCH curl INTO classId,compInfoId,sort_a,graduationYear;
IF sort_a <> null and graduationYear UPDATE t_class set grade=(SELECT grade_id FROM t_grade WHERE sort>sort_a AND comp_info_id=compInfoId AND status=1 ORDER BY sort LIMIT 1)
,grade_name=(SELECT name FROM t_grade WHERE sort>sort_a AND comp_info_id=compInfoId AND status=1 ORDER BY sort LIMIT 1) where class_id=classId;
ELSEif graduationYear=DATE_FORMAT(NOW(), '%Y') THEN
UPDATE t_class SET status=2 where class_id=classId;

end IF;
until flag = false
end repeat;
close curl;

END
这个是使用游标的方式, 就是如果数据量大的时候循环操作的时候会锁表,如何优化进行直接将结果按条件批量更新

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-09-16 10:54
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 3月31日

悬赏问题

  • ¥50 ZYNQ7020双核FLAHS烧写的问题
  • ¥20 ue 5 中想要实现第一人称人物左右行走摆动的效果,摄像头只向右摆动一次(关键词-结点)
  • ¥15 钢岔管添加弹性约束模拟围岩作用
  • ¥15 AD9164瞬时带宽1.8G,怎么计算出来?
  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除
  • ¥15 使用MATLAB进行余弦相似度计算加速
  • ¥15 服务器安装php5.6版本
  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数