如何用laravel锁定表?

v440hwme  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(310)

我想在事务中锁定一个表。像这样:

DB::transaction(function (){
    DB::statement('LOCK TABLES important_table WRITE');
    //....
  });

然而,这条线 DB::statement('LOCK TABLES important_table WRITE'); 总是触发以下错误:
sqlstate[hy000]:常规错误:当其他未缓冲查询处于活动状态时,2014无法执行查询。考虑使用pdostatement::fetchall()。或者,如果您的代码只在mysql上运行,您可以通过设置pdo::mysql\u attr\u use\u buffered\u query属性来启用查询缓冲(sql:锁定表(officeseal写入)
我怎样才能把table锁在拉威尔?

zzzyeukh

zzzyeukh1#

db::unprepared('lock tables important_table write');这个对我有用

anhgbhbe

anhgbhbe2#

您可以像这样在laravel中锁定表: DB::raw('LOCK TABLES important_table WRITE') ;

aurhwmvo

aurhwmvo3#

正如其他用户在评论中指出的那样,我并不认为表锁绝对是唯一的出路。然而,如果你坚持,你可以使用拉威尔的悲观锁定。也就是说, sharedLock() 以及 lockForUpdate() 方法,如文档中所述。
您会注意到文档中的示例没有使用雄辩的,而是依赖于查询生成器。然而,这个问答似乎表明,它可以做到与雄辩太。
这篇文章比较了laravel中悲观锁和乐观锁的实现,可能也值得一读。

相关问题