Laravel 5.1的表锁定问题

eks*_*tro 5 mysql laravel eloquent laravel-5

我无法使用此查询锁定MySQL表:

DB::statement('LOCK TABLES imports WRITE');
Run Code Online (Sandbox Code Playgroud)

它给出了这些例外:

[Illuminate\Database\QueryException]
Run Code Online (Sandbox Code Playgroud)

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

使用PDO时会发生同样的错误.

我该怎么用?

l3e*_*nam 6

如果你想要锁定整个表并且你想要使用LOCK TABLES table_name WRITE它应该以这种方式调用,DB::unprepared('LOCK TABLES imports WRITE');但是如果你只想在所选行上应用锁,那么使用sharedLock()或者lockForUpdate()是正确的方法这样做它将只返回并锁定选定的行.


Lan*_*och 3

// prevent rows from being modified until you're finished
DB::table('imports')->where('total', '>', 10)->sharedLock()->get();
Run Code Online (Sandbox Code Playgroud)

用于lockForUpdate()改为防止使用另一个共享锁修改或选择行。

  • 你好,请问什么时候解锁? (5认同)