MySQL:只有满足条件时才更新字段

是否有可能做一个MySQL更新查询,只有在满足某些条件时才更新字段值? 像这样的东西:

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 field = 1 WHERE id = 123 and condition 

在我看来,另一个更容易阅读的解决scheme是:

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

如果满足条件,则将“field”设置为1(如OP用作示例),如果不满足,则使用“field”的当前值。 使用以前的值是不变的,所以你去。

另一个变化:

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

只有满足{condition}才会用{new value}更新field