交易问题

时间:2010-07-21 23:21:23

标签: transactions

显然我在这个帖子中确实错了

Should I always use transactions in nhibernate (even for simple reads and writes)?

如何在没有事务的情况下从读取中获得不一致的结果?

编辑 - 原始问题是在nhibernate的上下文中。这个nhibernate具体吗?

1 个答案:

答案 0 :(得分:1)

不,它不是特定于休眠的。

简短回答:交易是“原子工作单位”,具有一致的世界观。一旦事务被保留,受保护的“视图”需要用世界的视图(COMMITTTED)来纠正 - 或者,在只读事务的情况下,一致的视图可以简单地被解除(它只需要是在交易期间保持一致。)

更长的答案:有许多不同类型的交易(READ UNCOMMITTED,READ COMMITTED,SERIALIZABLE,REPEATABLE READ等)会影响细节。

请参阅Wiki: Database TransactionIsolation (DBMS) - 后者需要点击几次链接才能找到: - )

想象一下这个快速设计的序列,A和B代表使用数据库的不同参与者,每个动作都在它自己的一次性隐式事务中运行(并且没有别的):

  1. A读取用户列表
  2. B删除用户(以及所有相关数据)
  3. A获取每个用户的信息(使用之前提取的信息)。但是,至少有一个用户不再存在。以某种方式更好地处理它。
  4. 请参阅隔离维基文章的“示例查询”部分。