Sobes.tech
Back to questions
Middle
4

Когда использовать SELECT FOR UPDATE, а когда UPDATE ... RETURNING? Приведи бизнесовые примеры.

Companies where asked
aic

Answer from AI

sobes.tech AI

SELECT FOR UPDATE используется, когда нужно заблокировать выбранные строки в базе данных для предотвращения их изменения другими транзакциями до завершения текущей. Это полезно, если после выборки данных вы планируете их обновить, и хотите избежать состояния гонки.

UPDATE ... RETURNING одновременно обновляет строки и возвращает изменённые данные, что удобно, когда нужно получить результат обновления без дополнительного запроса.

Бизнес-примеры:

  • SELECT FOR UPDATE: В банковской системе при переводе денег сначала выбираются и блокируются записи счетов отправителя и получателя, чтобы избежать одновременных изменений баланса.

  • UPDATE ... RETURNING: В системе бронирования билетов обновляется статус места на "забронировано" и сразу возвращается информация о брони, чтобы показать пользователю подтверждение.

Пример с SELECT FOR UPDATE:

BEGIN;
SELECT balance FROM accounts WHERE id = 123 FOR UPDATE;
-- вычисления
UPDATE accounts SET balance = balance - 100 WHERE id = 123;
COMMIT;

Пример с UPDATE ... RETURNING:

UPDATE tickets SET status = 'reserved' WHERE id = 456 RETURNING id, status, reserved_at;