在實際的開發場景中,我們有時候要對錶中的所有資料進行批量修改,但是當資料量十分盤龐大時,比如幾百萬幾千萬條資料,這時候我們執行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的環境下可以實現的,具體沒有驗證...