我最近开始使用 PHP/Laravel(我使用 Java 已有 15 年以上)。我在代码库中注意到这段代码:
public function doSomeStuffInDb() {
DB::beginTransaction();
// Some db calls here
DB::commit();
}
我已经在文档中发现正确的方法是使用 DB::transaction
和一个包含数据库调用的闭包。
但是我想知道在DB::commit()
调用之前调用数据库时出现异常会发生什么?我假设没有任何东西会存储在数据库中,因为你不提交,但它会产生进一步的后果吗(数据库行锁?)?离开函数时交易会不会中止?
最佳答案
任何尚未提交或回滚的事务都可能具有脏读、不可重复读、幻读以及您在 java 中实现的所有其他注意事项的相同危险。
意思——即使锁定是在行级别完成的,查询作为非锁定一致读取运行,您最终会产生很多进一步的后果。锁的处理取决于您的数据库设置,有时它们会超时,有些则保留它们。
关于php - Laravel:如果您不提交或回滚您手动启动的事务怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37743093/