我最近开始使用PHP / Laravel(我已经使用Java工作了15年以上)。我在代码库中注意到了这段代码:
public function doSomeStuffInDb() {
DB::beginTransaction();
// Some db calls here
DB::commit();
}
我在文档中已经发现,正确的方法是使用DB::transaction
和一个包含db调用的闭包。
但是我想知道在DB::commit()
调用之前调用数据库时发生异常会发生什么?我假设没有任何东西将存储在数据库中,因为你没有提交,但它是否会产生进一步的后果(db row locks?)?离开函数时交易是否会中止?
答案 0 :(得分:1)
任何尚未提交或回滚的事务都可能具有脏读,不可重复读,幻读以及您在java中实现的所有其他注意事项的相同危险。
含义 - 即使锁定在行级别完成,查询作为非锁定一致性读取运行,最终会产生许多进一步的后果。锁定的处理取决于您的数据库设置,有些时候它们会被删除,有些则会留下它们。