【发布时间】:2013-04-01 14:03:16
【问题描述】:
我真的很困惑提交事务如何需要一些时间来进行更新。
这是我正在尝试的场景:
1. 提交一个事务(所有更新语句)
2. 访问数据库并尝试获取更新
在这里,当我尝试获取更新时,有时我没有得到最新的更新。
有时我会得到旧版本的数据。
这里有更多细节: 在事务中,我有两个更新语句说它在每次更新时将一个 int 字段更新 1 例如:在任何更新之前,我在 db 中的值为 5,现在有两个更新的事务将使其变为 7。
提交事务后,我尝试使用连接对象和 PreparedStatement 获取它。
我得到的结果是 6。不是 7。虽然当我在 DB 上看到 7 时。
因此,我进行了更多调试,并尝试跟踪数据库更新的时间戳和获取数据的时间戳。
令我惊讶的是,我获取数据的时间戳小于上次更新数据库的时间戳。
有人对此有任何想法吗?
【问题讨论】:
-
你能解释更多关于你正在做什么的细节吗?
commit调用没有结构性问题,然后是单独的进程/任务/进入数据库并请求该数据的任何内容。如果您没有看到某些数据,则表明您尚未提交所有数据或阅读器进程上的事务可能需要“刷新”(因为缺乏更好的术语)。 -
您需要在每次更新之间提交 - 大多数 RDBMS 将证明是读取一致的视图 - 这意味着您将在“开始查询时”获得结果,即使某些数据在您更改时阅读结果。
标签: database