首页 > 解决方案 > 部分更新:查询然后更新 SQL 中的一行以确保只更新修改后的值

问题描述

我正在尝试更新表格的一行,但我无法提前知道哪个字段将被更新。

首先,我想我只是查询现有行,然后比较旧值与新值,只更新不同的值,但即使在我的用例中非常不可能,如果有人在在我的更新中间(同时将我的 -compare- 查询的结果保存在内存/ram 中)我将覆盖更新后所做的所有更改。

目前我正在考虑尝试将其变成一个首先查询然后更新然后提交的事务,但它会再次阻止所有其他请求或最终得到相同的结果。

什么是正确的方法(如果有的话)在传递整个“更新”对象时只更新我想要的字段。我可以准备与他们的列一样多的查询组合,并在运行时决定使用哪个查询,但它看起来如此混乱和不切实际,我确信还有另一种方法可以做到这一点。

编辑我试图避免的问题示例:

原始数据:c1 = foo c2 = bar

后端进行查询并检索该行,因此将保存在 ram c1 = foo c2 = bar

在同一时间另一个用户做同样的事情并将持有 c1 = foo c2 = bar

用户 1 想要将 c2 更新为“hello”

用户 2 想要将 c1 更新为“hi”

用户 1 更新查询将是UPDATE table SET c1="foo" ,c2="hello"

用户 2 更新查询将是UPDATE table SET c1="hi" ,c2="bar"

首先发送查询的用户将被另一个用户覆盖。

标签: sqlgosql-update

解决方案


推荐阅读