当前位置: 首页 > 面试题库 >

MySQL:仅在满足条件时更新字段

鲍健柏
2023-03-14
问题内容

是否可以在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不会更新该行(如果没有更改),如docs中所述:

如果将列设置为其当前值,MySQL会注意到这一点,并且不会对其进行更新。



 类似资料:
  • 问题内容: 我有一个包含ID,WorkerID,IsActive标志(1或0)和LocalTime的表。每次工作人员处于活动状态或不活动状态时,都会使用WorkerID,1或0标志记录以及一个时间(LocalTime)创建一条记录。 我想插入一个新表中:从该表中,对于每个唯一的WorkerID,仅当该记录的IsActive标志为1时,才为该唯一的WorkerID选择具有最新LocalTime的记录

  • 当条件(if)满足时,我尝试将文本着色为绿色或红色。 这是我的函数getAll() 在我的表格中,有一部分我想给文本上色。下面的例子不起作用。 我也试过,但它总是在绿色或红色上着色。 我想做这样的事情:如果有一天,然后颜色文本的红色或绿色。

  • 问题内容: 我正在使用构建Web POST参数的方法,但是有一些值仅在它们不存在的情况下才想添加。 效果很好,但是如果我将变量设为可选,如何防止将其添加到参数中?像这样的东西(伪代码): 我希望这已经足够清楚了,有人知道如何解决吗? 问题答案: 创建初始字母后,您必须单独添加密钥: Python没有语法将键定义为条件键;如果您已经按顺序拥有所有内容,则可以使用dict理解: 但这不是很可读。 另一

  • 问题内容: 我的数据结构如下: 我正在尝试进行一个SQL查询,该查询将计算正在运行的SUM,但在小时数为3时将重置。结果应如下所示: 问题答案: 您可以使用条件总和创建子组:

  • 我知道使用ES6 JavaScript对象,您可以使用动态声明变量为对象键,例如: <代码>{[2]:“四!”} 给出输出{code>{“4”:“four!”} 问题是,可以采用类似的方法通过变量等内联方式添加整个属性吗?意思是,假设我有以下测试对象: 如果满足某个条件,我是否可以在内联对象中为someOtherProp编写任何内容,只将其添加到对象中?例如(伪代码),类似这样的东西 会像上面一样

  • 我对可缓存批注的条件有问题。 从文档中,我了解到除非条件在被注释的方法被调用后得到验证,并且只有在不满足除非条件的情况下,方法返回的值才会被缓存(并实际返回)。否则,应返回缓存的值。 首先,这个假设是否正确? 编辑: [来自Spring文档]顾名思义,@Cacheable用于划分可缓存的方法-即,将结果存储到缓存中的方法,因此在后续调用(使用相同的参数)时,缓存中的值将返回,而不必实际执行该方法。