假设我有隔离级别读已提交
我的交易读取为 A
另一笔交易修改了A和B
然后我读了B
我做了一些涉及 A 和 B 的业务逻辑
所以我会发现自己在一个从未存在过的状态中工作..?
您如何应对?
最佳答案
您应该提供更详细的信息,例如步骤 1 和 3 是在相同还是不同的事务中执行。还要提及步骤 4(即“业务逻辑”)是否读取或更新 A 和/或 B。如果没有更多信息,就不可能准确回答您的问题。在高水平上 -
读取已提交:您会看到已提交的行。在这种情况下,由于 A 在另一个事务修改它之前被读取(假设您的项目符号描述了事件 I 到 IV 的顺序),因此在步骤 II 后您可能没有最新值 A。如果您在单独的事务中读取 B,您可能会在步骤 II 中看到 B 是最新的。
可重复读:在同一个事务中一致地读取相同的数据。如果一个事务试图修改 A,而另一个事务正在读取它,则根据并发控制机制,重复读取或更新都会失败。
附注要执行原子更新,您可以考虑使用“选择更新”查询。
关于java - 隔离级别和不一致状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40220474/