簡體   English   中英

MySQL:僅在滿足條件時更新字段

[英]MySQL: update a field only if condition is met

是否可以在 MySQL 中執行 UPDATE 查詢,僅在滿足某些條件時才更新字段值? 像這樣的東西:

UPDATE test
SET
    CASE
        WHEN true
        THEN field = 1
    END
WHERE id = 123

換句話說:

UPDATE test
SET
    something = 1,        /*field that always gets updated*/
    CASE
        WHEN true
        THEN field = 1    /*field that should only get updated when condition is met*/
    END
WHERE id = 123

這樣做的正確方法是什么?

是的!

這里還有另一個例子:

UPDATE prices
SET final_price= CASE
   WHEN currency=1 THEN 0.81*final_price
   ELSE final_price
END

這是有效的,因為如果沒有更改,MySQL 不會更新該行,如文檔中所述

如果您將一列設置為它當前擁有的值,MySQL 會注意到這一點並且不會更新它。

在我看來,另一個更容易閱讀的解決方案是:

UPDATE test 
    SET something = 1, field = IF(condition is true, 1, field) 
    WHERE id = 123

如果滿足條件,則將“字段”設置為 1(如用作示例的 OP),如果不滿足則使用“字段”的當前值。 使用先前的值與不更改相同,所以你去。

試試這個:

UPDATE test
SET
   field = 1
WHERE id = 123 and condition

另一種變體:

UPDATE test
SET field = IF ( {condition}, {new value}, field )
WHERE id = 123

僅當滿足{condition}才會使用{new value}更新field

我們可以使用 MySQL IF()條件函數的另一種解決方案:

UPDATE test
SET  field  = IF(something == 1{CONDITION}, 1 {NEW VALUE}, field)
WHERE `id` = 5

找到了 AND 條件的解決方案:

  $trainstrength = "UPDATE user_character SET strength_trains = strength_trains + 1, trained_strength = trained_strength +1, character_gold = character_gold - $gold_to_next_strength WHERE ID = $currentUser AND character_gold > $gold_to_next_strength";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM