MySQL的:更新只有当条件满足现场(MySQL: update a field only if c

2019-07-19 23:39发布

是否有可能做到在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

什么是这样做的正确方法?

Answer 1:

是!

这里有一个例子:

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

这工作,因为MySQL不更新该行,如果没有变化, 如在文档中提到 :

如果设置为它当前的值的列时,MySQL注意到这一点,并没有更新。



Answer 2:

另一种解决方案,在我看来,更易于阅读将是:

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

这样做是设置“场”为1(像OP用作示例)如果满足条件,并使用“场”的当前值,如果没有得到满足。 使用前值是一样的不改变,所以你去。



Answer 3:

试试这个:

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


Answer 4:

另一种解决方案,我们可以使用MySQL IF()条件函数:

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


Answer 5:

另一个变化:

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

这将更新field{new value}只有{condition}满足



文章来源: MySQL: update a field only if condition is met