sql迴圈語句在update中的應用

2021-10-09 17:26:09 字數 1233 閱讀 8237

在實際的開發場景中,我們有時候要對錶中的所有資料進行批量修改,但是當資料量十分盤龐大時,比如幾百萬幾千萬條資料,這時候我們執行update語句的話就會長時間鎖住該錶。這樣非常容易造成死鎖現象(在企業中dba肯定是不允許執行這種sql語句的)。所以為了避免出現這種問題,我們在執行批量修改的語句時就要分批修改,一次只能修改少量的資料,避免長時間占用該錶。所以為了應對該種場景,可以使用一下的資料庫的while語法,迴圈執行update語句。

現在我通過舉例一種場景來實現迴圈操作的執行:

假設我們有一張表user(主鍵為id):

name

***剛某男–

–東某男羅某

男其中有百萬條資料,這時候,萬惡的產品突然來了個需求,需要實現需要在表中再加乙個欄位new_status(狀態),並且歷史資料全部設定為1,

這時候就開始執行資料庫語句了:

-- 在user表中新增字段 status

alter

table

user

add new_status int

;begin

declare

@start

int-- 定義變數 start

declare

@end

int-- 定義變數 end

declare

@maxid

int-- 定義變數 maxid (主鍵最大值)

set@start=1

set@end

=100000

-- 迴圈體每次執行1萬條資料

set@maxid=(

select

max(id)

from

user

)-- user表中最大值

-- 迴圈體開始

while

@start

<

@maxid

begin

-- 迴圈體內需要執行的 sql 語法

update

user

set new_status =

1where id between

@start

and@start

+@end

set@start

=@start

+@end

end--迴圈體結束

end

這種迴圈語法適用於非常多的場景,這只是其中的一種,希望我的分享對一些資料庫萌新在開發中有所幫助

SQL語句 UPDATE語句

update students set sname abcd gender 1 where sid 1 update students,students2 set students.sname students2.sname,students.gender students2.gender wher...

關於SQL中的Update語句

今天在sql資料庫操作時需要將一張表中的資料update到另一張表中去,可是用我以往的寫法確怎麼也不能成功.如下 update table1 a set a.col1 b.col2 from table2 b where a.c b.c 上面的寫法似乎是在oracle的環境下可以實現的,具體沒有驗證...

關於SQL中的Update語句

今天在sql資料庫操作時需要將一張表中的資料update到另一張表中去,可是用我以往的寫法確怎麼也不能成功.如下 update table1 a set a.col1 b.col2 from table2 b where a.c b.c 上面的寫法似乎是在oracle的環境下可以實現的,具體沒有驗證...