Laravel lockforupdate недоразумение SELECTS - PullRequest
0 голосов
/ 20 февраля 2019

Простой вопрос.

Если я использую DB :: Transactions (), и я делаю следующее:

DB::transaction(function()
{
  $result = 
    DB::table('orders')->select('id')->where('id', '>', 17)->lockForUpdate()->get();
});

Что произойдет, если я выполню этот скрипт точно в том же разбиенииsecond?

Laravel говорит:

В качестве альтернативы вы можете использовать метод lockForUpdate.Блокировка «для обновления» предотвращает изменение строк или их выбор с помощью другой общей блокировки.

Блокирует ли блокировка блокировки для чтения в то же самое времявремя, или это влияет только при следующем обновлении строки?

Могу ли я гарантировать, что скрипт уже читает из этой строки, тогда параллельный скрипт в ту же миллисекунду будетсбой и ПОДОЖДИТЕ для транзакции снять блокировку перед тем, как пытаться запустить код?

Я не нашел нигде супер ясного ответа, все примеры пытаются обновить или вставить.Я просто хочу защититься от одновременного выбора.

...