MySQL有一个Locking an Entire Table的概念,我试图在Eloquent中调用它。据我所知,Eloquent提供了a lockForUpdate function来锁定给定选择查询的所有记录。但是,我在整个表上运行该命令遇到大量死锁错误。例如
DB::table('users')->lockForUpdate()->get();
我怀疑不同的会话正在调用lockForUpdate函数并以不同的顺序锁定行,因此频繁出现死锁。但是,我的感觉是,考虑到我们需要锁定表中的每一行,或许依赖于lockForUpdate函数是错误的方法。
有没有人知道一种更好的处理方式的方法,就像调用lockForUpdate一样方便?我知道我们可以根据需要调用原始SQL来锁定和解锁表,但考虑到我们需要记住在每次交易结束时解锁表,这似乎很容易出错,所以我'我希望尽可能避免这种情况。