mysql批次更新資料,即:迴圈select記錄然後更新某一欄位

來源:互聯網
上載者:User

標籤:判斷   思考   case   就刪除   until   語句   小程式   sel   開始   

事情的原委:

  今天遇到一個問題:一個資料表case_folder_info想要實現自訂排序功能,就在表裡新加了一個欄位SORT_NUMBER,由於表裡存在已有資料,所以這個SORT_NUMBER欄位都為空白,但要想實現上移、下移、置頂等功能的話,需要裡面有預設資料,所以我想給這個欄位裡預設有一些排序的值。

思考解決辦法:

  1、用c#寫個小程式,然後取出來所有資料,UPDATE一遍,這個還得建立項目,添加資料庫連接字串,添加資料庫類庫引用,太麻煩。

  2、用資料庫內建的命令列方式實現。

  最終經過我頭腦的一番小鬥爭,雖然sql不太熟但還是決定嘗試一下吧。

sql實現的思路:

  由於命令列中無法直接使用declare這樣使用變數,所以乾脆用非常現的方式來解決吧,先建一個臨時的預存程序,在預存程序中實現我要想的迴圈賦值,然後使用完後再刪除這個預存程序就可以了。

具體的sql語句:

/*判斷是否存在,如果存在就刪除*/
drop procedure if exists tempProcedure_Test;/*取一個系統中絕對不會用到的預存程序名稱*/
/*建立暫存預存程序*/
create procedure tempProcedure_Test()
BEGIN
declare isDone int default 0; /*判斷是否還有記錄*/
declare intNumber int default 1;/*用於自增的變數*/
declare tempId char(36); /*每條記錄迴圈時的臨時ID*/

declare folderIds cursor for select A.ID from case_folder_info as A;/*取出來所有需要迴圈的資料*/
declare continue handler for not FOUND set isDone = 1;/*如果不存在就設定為1,即為true*/
open folderIds; /*OPEN*/

REPEAT /*開始迴圈資料*/
fetch folderIds into tempId;
if not isDone THEN
update case_folder_info set SORT_NUMBER=intNumber where id=tempId;
set intNumber=intNumber+1;
end if;
until isDone end repeat;
close folderIds; /*CLOSE,對應上面的open folderIds;*/
END;
call tempProcedure_Test();/*調用下這個臨時的預存程序*/
drop procedure tempProcedure_Test; /*使用完畢後要刪除垃圾*/

完畢,收工!

mysql批次更新資料,即:迴圈select記錄然後更新某一欄位

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.