Mysql Laravel锁定更新

Mysql Laravel锁定更新,mysql,database,concurrency,laravel-4,transactions,Mysql,Database,Concurrency,Laravel 4,Transactions,简单的问题 如果使用DB::transactions()并执行以下操作: DB::transaction(function() { $result = DB::table('orders')->select('id')->where('id', '>', 17)->lockForUpdate()->get(); }); 如果我在完全相同的瞬间执行此脚本,会发生什么 拉雷维尔说: 或者,您可以使用lockForUpdate方法。A“供更新” 锁定可防止

简单的问题

如果使用DB::transactions()并执行以下操作:

DB::transaction(function()
{
  $result = 
    DB::table('orders')->select('id')->where('id', '>', 17)->lockForUpdate()->get();
});
如果我在完全相同的瞬间执行此脚本,会发生什么

拉雷维尔说:

或者,您可以使用lockForUpdate方法。A“供更新” 锁定可防止行被修改或被选中 另一个共享锁

lockForUpdate是否会防止读取同时发生,还是仅在对行执行后续更新时才会产生影响?

我能保证如果一个脚本已经从这一行读取,那么在同一毫秒的并发脚本将失败,并等待事务释放锁,然后再尝试运行代码吗


我还没有找到一个超级清晰的答案,所有的例子都在尝试更新或插入。我只是想防止并发选择。

这是一个旧线程,但由于没有答案,这是我的输入。我也遇到过类似的情况,在几次T&E之后,我终于锁定了表记录,这些记录在给定的时间内只能由一个独占事务进行修改


可能不值得一提的是,您的表存储引擎是否设置为InnoDB?因为在几次失败的尝试之后,我发现我的表存储引擎是MyISAM。

这是一个旧线程,但由于没有答案,这是我的输入。我也遇到过类似的情况,在几次T&E之后,我终于锁定了表记录,这些记录在给定的时间内只能由一个独占事务进行修改


可能不值得一提的是,您的表存储引擎是否设置为InnoDB?因为在几次失败的尝试之后,我发现我的表存储引擎是MyISAM。

我正在运行并发测试,SELECT后面的行似乎发生在同一毫秒。这意味着它没有按预期锁定行?我正在运行并发测试,SELECT后面的行似乎发生在同一毫秒。这意味着它没有按预期锁定行?