批量修改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
本文来自博客园,作者:小陈子博客,转载请注明原文链接:https://www.cnblogs.com/cj8357475/p/15819112.html