【发布时间】:2019-07-13 14:18:36
【问题描述】:
简单的问题。
如果我使用 DB::transactions() 并执行以下操作:
DB::transaction(function()
{
$result =
DB::table('orders')->select('id')->where('id', '>', 17)->lockForUpdate()->get();
});
如果我在完全相同的瞬间执行此脚本会发生什么?
Laravel 说:
或者,您可以使用 lockForUpdate 方法。一个“更新” lock 防止行被修改或被选中 另一个共享锁。
lockForUpdate 是否会阻止读取同时发生,还是仅在对行执行后续 UPDATE 时才起作用?
我能否保证如果脚本已经从该行读取,那么同一毫秒的并发脚本将失败并等待事务释放锁,然后再尝试运行代码?
我在任何地方都没有找到超级明确的答案,所有示例都在尝试更新或插入。我只是想防止并发选择。
【问题讨论】:
-
我正在运行并发测试,并且 SELECT 之后的行似乎发生在同一毫秒。这意味着它没有按预期锁定行?
标签: mysql database concurrency laravel-4 transactions