是否可以在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
这样做的正确方法是什么?
答案 0 :(得分:107)
是!
这里有另一个例子:
UPDATE prices
SET final_price= CASE
WHEN currency=1 THEN 0.81*final_price
ELSE final_price
END
这是有效的,因为MySQL没有更新行,如果没有变化,as mentioned in docs:
如果将列设置为当前的值,MySQL会注意到这一点 并且不会更新它。
答案 1 :(得分:17)
在我看来,另一种更容易阅读的解决方案是:
UPDATE test SET something = 1, field = IF(condition is true, 1, field) WHERE id = 123
这样做是设置'字段'如果条件满足并使用'字段'的当前值,则为1(如OP用作示例)如果没有满足。使用前一个值与不改变相同,所以你去。
答案 2 :(得分:15)
试试这个:
UPDATE test
SET
field = 1
WHERE id = 123 and condition
答案 3 :(得分:2)
我们可以使用MySQL IF()
条件函数的另一种解决方案:
UPDATE test
SET field = IF(something == 1{CONDITION}, 1 {NEW VALUE}, field)
WHERE `id` = 5
答案 4 :(得分:1)
另一种变化:
UPDATE test
SET field = IF ( {condition}, {new value}, field )
WHERE id = 123
只有在符合field
时才会{new value}
更新{condition}
答案 5 :(得分:-1)
找到具有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";