批量修改sql

需求是我有张表需要新增一个字段。这个字段需要从其他的表获取。思路是先查询再update.所以涉及到了批量修改。这里我提供两种思路。一种是存储过程。一种是sql(这种我之前是没有想到的)

储存过程写法

先执行如下的sql,创建存储过程。

DELIMITER $$ 
DROP PROCEDURE IF EXISTS update_district_level $$
CREATE PROCEDURE update_district_level()
BEGIN
DECLARE row_id bigint;
DECLARE row_avatar varchar(255);#定义变量头像
DECLARE done INT;
-- 定义游标
DECLARE rs_cursor CURSOR FOR
SELECT u.id,u.avatar FROM leyin_member.`user` u;--会查询多个
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN rs_cursor; 
cursor_loop:LOOP
FETCH rs_cursor INTO row_id,row_avatar; -- 取数据
IF done=1 THEN
leave cursor_loop;
END IF;
-- 更新表
update leyin_im.room r set r.room_cover=row_avatar where r.user_id=row_id;--批量修改
END LOOP cursor_loop;
CLOSE rs_cursor;
END$$
DELIMITER ;

此时执行了上面的内容显示生成了一个存储过程,接下来就需要调用了

执行如下方法

CALL update_district_level();

此时该功能已经完成了。

但是在提交到正式环境的时候被总监打回来了。说没必要这样写,然后他提供了第二种写法。

sql写法

update leyin_im.room r INNER JOIN leyin_member.user u ON r.user_id=u.id set r.room_cover=u.avatar

是不是很简单。采用关联查询,然后再做update

posted @ 2022-01-18 18:06  小陈子博客  阅读(1321)  评论(0编辑  收藏  举报