我最近开始使用PHP/Laravel(我已经使用Java15+年了)。我在代码库中注意到了这段代码:
public function doSomeStuffInDb() {
DB::beginTransaction();
// Some db calls here
DB::commit();
}
我已经在文档中发现,正确的方法是将DB::transaction
与包含数据库调用的闭包一起使用。
但是我想知道在DB::commit()
调用之前调用数据库时会发生什么?我假设由于您不提交,数据库中不会存储任何内容,但它会产生进一步的后果(db 行锁?离开函数时事务是否会中止?
任何尚未提交或回滚的事务都可能具有相同的危险,即脏读、不可重复读取、幻像读取以及您在 Java 中实现的所有其他注意事项。
含义 - 即使锁定是在行级别完成的,查询作为非锁定一致性读取运行,您最终也会产生很多进一步的后果。锁的处理取决于您的数据库设置,有时超时,有些保留它们。