Когда использовать SELECT FOR UPDATE, а когда UPDATE ... RETURNING? Приведи бизнесовые примеры.
Ответ от нейросети
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;