mysql一條語句update多條記錄

2021-07-08 16:47:23 字數 1455 閱讀 3876

通常情況下,我們會使用以下sql語句來更新字段值:

update mytable set myfield='value'

where other_field='other_value';

但是,如果你想更新多行資料,並且每行記錄的各字段值都是各不一樣,你會怎麼辦呢?剛開始你可能會想到使用迴圈執行多條update語句的方式,就像以下的php程式示例:
foreach ($display_order

as$id => $ordinal)

這種方法並沒有什麼任何錯誤,並且**簡單易懂,但是在迴圈語句中執行了不止一次sql查詢,在做系統優化的時候,我們總是想盡可能的減少資料庫查詢的次數,以減少資源占用,同時可以提高系統速度。幸運的是,還有更好的解決方案,只不過sql語句稍微複雜點,但是只需執行一次查詢即可,語法如下:
update mytable

set myfield = case other_field

when

1then

'value'

when

2then

'value'

when

3then

'value'

endwhere id in (1,2,3)

這樣的sql語句是很容易理解的,也就是用到了很多程式語言都有的關鍵字 case,根據id欄位值來進行不同分支的當型判斷,

如果你需要更新一行記錄的多個字段,可以用以下sql語句:

update categories

set display_order = case id

when

1then

3when

2then

4when

3then

5end,

title = case id

when

1then

'new title 1'

when

2then

'new title 2'

when

3then

'new title 3'

endwhere id in (1,2,3)

以上方案大大減少了資料庫的查詢操作次數,大大節約了系統資源,但是該怎樣與我們的程式語言結合起來呢?我們還是用剛才分類目錄的例子,以下是php的程式示例:

在這個例子中總共更新了8行資料,但是只執行了一次資料庫查詢,相比於迴圈執行8次update語句,以上例子所節約的時間可以說是微不足道的。但是想想,當你需要更新10,0000或者更多行記錄時,你會發現這其中的好處!唯一要注意的問題是sql語句的長度,需要考慮程式執行環境所支援的字串長度,當然這也可以更新mysql的設定來擴充套件。

優化一條UPDATE語句

最近見到一條開發人員寫的update語句,覺得沒什麼不對,可又覺得有地方不對,因為效能低下.update a set col2,col3 select col1,t from b where b.col1 a.col1 where exists select b.col1 from b where ...

一條Update語句實現兩列值的交換

趙老闆,前些日子去某軟體公司筆試去了,拿到試卷,第乙個題就是 用一條update交換兩列的值 當然表是給定的。這還不簡單,上去就要寫,可是寫不出來,交換值肯定要用乙個中間變數來儲存。左思右想,還是沒有想出來,放棄,做下乙個題。趙老闆回來問這個自稱是sql高手的高總,聽了以後我的頭腦也暈了,沒有思路,...

檢視一條mysql語句的效能

mysql資料庫在5.0.37版本後新增了show profiles功能,可以分析出一條sql語句的效能。檢查資料庫是否支援show profiles功能 show variables like version 檢視profiles是否開啟 show variables like pro 開啟命令 ...