【发布时间】:2013-04-25 17:48:51
【问题描述】:
假设我在事务中执行以下步骤:
- 从数据库中读取一些数据A
- 根据它做一些计算
- 将一些数据B写入数据库
如果A同时发生变化,是否有可能使这个事务失败?
简而言之:如何在持久化包中实现隔离?
【问题讨论】:
标签: haskell persistent yesod
假设我在事务中执行以下步骤:
如果A同时发生变化,是否有可能使这个事务失败?
简而言之:如何在持久化包中实现隔离?
【问题讨论】:
标签: haskell persistent yesod
我自己没有使用过persistent,但Yesod book 提到了这一点
需要注意的重要一点是,发生在 对
runSqlConn的单个调用在单个事务中运行。这有两个 重要意义:
对于许多数据库,提交事务 可能是一项昂贵的活动。通过将多个步骤放在一个 事务,您可以显着加快代码速度。
如果出现异常 在对
runSqlConn的一次调用中抛出任何地方,所有操作都会 回滚(假设您的后端支持回滚)。
这是否为您提供隔离保证可能取决于给定的后端是否为事务提供隔离保证。
【讨论】: