我正在尝试更新表中的一行,但无法提前知道将更新哪个字段。
首先我想我只需要查询现有的行,然后比较旧值和新值,只更新不同的值,但是即使在我的用例中非常不可能,如果有人在我的更新过程中更新数据(在内存/ram中保存my-compare-query的结果),我会覆盖更新后所做的所有更改。
目前,我正在考虑将其转换为一个事务,该事务将首先进行查询,然后进行更新,然后进行提交,但它会再次阻止所有其他请求,或者最终得到相同的结果。
在传递整个“updated”对象时,只更新所需字段的正确方法是什么(如果有的话)。我可以准备和他们的列一样多的查询组合,并在运行时决定使用哪个查询,但它看起来太混乱和不切实际了,我相信还有其他方法可以做到这一点。
以我试图避免的问题为例进行编辑:
原始数据: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"
首先发送查询的用户将被另一个用户覆盖。
暂无答案!
目前还没有任何答案,快来回答吧!