我无法使用此查询锁定MySQL表:
DB::statement('LOCK TABLES imports WRITE');
它给出了这些例外:
[Illuminate\Database\QueryException]
SQLSTATE [HY000]:常规错误:2014无法执行查询 其他未缓冲的查询处于活动状态。考虑使用 PDOStatement对象::使用fetchall()。或者,如果您的代码只是永远 要对mysql运行,您可以通过设置启用查询缓冲 PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性。 (SQL:LOCK TABLES 进口WRITE)
使用PDO时会发生同样的错误。
我应该如何使用它?
答案 0 :(得分:6)
如果要锁定整个表并且想要使用LOCK TABLES table_name WRITE
,则应以这种方式调用DB::unprepared('LOCK TABLES imports WRITE');
,但如果您只想对所选行应用锁定,则使用{{ 1}}或sharedLock()
是正确的方法,因此它将返回并仅锁定所选行。
答案 1 :(得分:3)
// prevent rows from being modified until you're finished
DB::table('imports')->where('total', '>', 10)->sharedLock()->get();
使用lockForUpdate()
来防止使用其他共享锁修改或选择行。