sql - 部分更新:查询然后更新 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"
首先发送查询的用户将被另一个用户覆盖。
解决方案
推荐阅读
- python - 每次必要时在 for 循环中创建一个新列表
- python - 客户端和服务器只接收和发送一次
- php - 如何计算数组中连续空值的数量
- ios - 当collectionView折叠时隐藏collectionView内容
- java - 奇怪的 JAVA UTF-8 编码行为,new String(bytes,"UTF-8") 在大部分相似的设置上给出不同的结果
- webrtc - Ant Media、Jitsi 和 Janus 哪一个最适合在移动应用程序中启动一对多实时语音流?
- python - 有没有办法解决这个 smtp 连接错误?
- bash - 在 bash 中从键盘读取 n 个值
- java - 在 Java 中模拟链表
- reactjs - 对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态 - React 问题