Я сохраняю финансовые транзакции в базе данных. По соображениям эффективности в строке транзакции я сохраняю счет, а также остаток на счете. 0 Например:laravel 5.4: пессимистическая блокировка. Избегайте выбора строки до завершения транзакции
ID | TRANSACTION_AMOUNT | ACCOUNT_BALANCE
ACCOUNT_BALANCE в новой строке рассчитывается как последний ACCOUNT_BALANCE + новый TRANSACTION_AMOUNT.
Для продолжения этой операции мне нужно сначала выбрать SELECT, а затем INSERT. Проблема заключается в том, что две транзакции поступают почти одновременно. Оба они прочтут тот же последний ACCOUNT_BALANCE, и после того, как вставка ACCOUNT_BALANCE будет непоследовательной.
Я видел функцию lockForUpdate(), но я не полностью уверен, как использовать ее для этого случая или даже если применимо.
Каков наилучший подход для решения этой проблемы?
Вы можете использовать Laravel запланированное задание, чтобы обновить account_balance позже вместо того, чтобы делать оба togther. – sumit