假设我在事务中执行以下步骤:
如果A在平均时间内发生了变化,是否可以使此交易失败?
简而言之:如何在持久化包中实现隔离?
答案 0 :(得分:4)
我自己没有使用过persistent
,但是Yesod book提到了
需要注意的一件重要事情是发生在一个内部的一切 单个调用
runSqlConn
在单个事务中运行。这有两个 重要的含义:
对于许多数据库,提交事务 可能是一项昂贵的活动。通过将多个步骤合并为一个 交易,你可以大大加快代码。
如果有例外 在一次调用
runSqlConn
内的任何地方抛出,所有操作都会 回滚(假设你的后端有回滚支持)。
这是否为您提供隔离保证可能取决于给定的后端是否为事务提供隔离保证。