需求是我有張表需要新增一個字段。這個字段需要從其他的表獲取。思路是先查詢再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