批量修改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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM