Transactions 交易问题

Transactions 交易问题,transactions,Transactions,显然,我在这方面真的错了 在没有事务的情况下,如何从读取中获得不一致的结果 编辑——最初的问题是在nhibernate的背景下提出的。这是nhibernate特有的吗?不,它不是hibernate特有的 简短回答:事务是“原子工作单元”,具有一致的世界观。一旦事务被保留,受保护的“视图”就需要用世界视图(committed)进行纠正——或者,在只读事务的情况下,一致性视图可以简单地被免除(它只需要在事务期间保持一致) 更详细的回答:有许多不同类型的事务(未提交读取、提交读取、可序列化、可重复读

显然,我在这方面真的错了

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


编辑——最初的问题是在nhibernate的背景下提出的。这是nhibernate特有的吗?

不,它不是hibernate特有的

简短回答:事务是“原子工作单元”,具有一致的世界观。一旦事务被保留,受保护的“视图”就需要用世界视图(committed)进行纠正——或者,在只读事务的情况下,一致性视图可以简单地被免除(它只需要在事务期间保持一致)

更详细的回答:有许多不同类型的事务(未提交读取、提交读取、可序列化、可重复读取等)会影响细节

请参见和--后者需要单击几个链接才能找到:-)

想象一下这个快速设计的序列,A和B使用DB表示不同的参与者,每个动作都在它自己的一次性隐式事务中运行(除此之外什么都没有):

  • A读取用户列表中的内容
  • B删除用户(和所有相关数据)
  • 获取每个用户的信息(使用以前获取的信息)。但是,至少有一个用户不再存在。最好设法处理它

  • 请参阅隔离wiki文章的“示例查询”部分。

    不,它不是特定于hibernate的

    简短回答:事务是“原子工作单元”,具有一致的世界观。一旦事务被保留,受保护的“视图”就需要用世界视图(committed)进行纠正——或者,在只读事务的情况下,一致性视图可以简单地被免除(它只需要在事务期间保持一致)

    更详细的回答:有许多不同类型的事务(未提交读取、提交读取、可序列化、可重复读取等)会影响细节

    请参见和--后者需要单击几个链接才能找到:-)

    想象一下这个快速设计的序列,A和B使用DB表示不同的参与者,每个动作都在它自己的一次性隐式事务中运行(除此之外什么都没有):

  • A读取用户列表中的内容
  • B删除用户(和所有相关数据)
  • 获取每个用户的信息(使用以前获取的信息)。但是,至少有一个用户不再存在。最好设法处理它

  • 请参阅Isolation wiki文章的“示例查询”部分。

    没错,但是如果服务器操作正在执行单次读取,那么当写入的并发操作没有正确的事务隔离类型时,不会发生未提交的读取类型错误吗?@hvgotcodes我将稍微限定我前面的注释。如果您只是在SQL Server中执行单次读取,则不必担心事务,因为您将自动执行隐式事务。对,但如果服务器操作正在执行单次读取,那么,当写入的并发操作没有正确的事务隔离类型时,是否会发生未提交的读取类型错误?@hvgotcodes我将稍微限定我前面的注释。如果您只是在SQL Server中执行一次读取,您就不必担心事务,因为您将自动处于隐式事务中。