如何用Laravel锁定表?

Ada*_*dam 3 mysql innodb locking laravel

我想在事务内锁定表。像这样:

  DB::transaction(function (){
    DB::statement('LOCK TABLES important_table WRITE');
    //....
  });
Run Code Online (Sandbox Code Playgroud)

但是,该行DB::statement('LOCK TABLES important_table WRITE');始终会触发以下错误:

SQLSTATE [HY000]:常规错误:2014当其他无缓冲查询处于活动状态时,无法执行查询。考虑使用PDOStatement :: fetchAll()。另外,如果您的代码只打算针对mysql运行,则可以通过设置PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性来启用查询缓冲。(SQL:LOCK TABLES officeSeal WRITE)

如何锁定Laravel中的桌子?

Ada*_*dam 6

可以这样在Laravel中锁定表:

DB::raw('LOCK TABLES important_table WRITE');

  • 对于任何尝试过此答案但失败的人,请尝试以下操作:`DB::unprepared('LOCK TABLES important_table WRITE');` (2认同)
  • 我只是想提醒其他人“DB::raw”只会生成字符串。它不会直接执行sql语句。 (2认同)