Что такое SELECT FOR UPDATE в SQL
Python
Middle
Без компании
Что такое SELECT FOR UPDATE в SQL
Ответы
`SELECT FOR UPDATE` — это SQL-запрос, который блокирует выбранные строки до завершения текущей транзакции, предотвращая их изменение другими транзакциями. Используется для обеспечения согласованности данных при конкурентном доступе.
**Пример:**
```
BEGIN;
SELECT * FROM accounts WHERE user_id = 1 FOR UPDATE;
-- Другие транзакции не смогут изменять эти строки до COMMIT/ROLLBACK
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
COMMIT;
```
**Нюансы:**
- Блокировка снимается при `COMMIT` или `ROLLBACK`.
- Может привести к взаимоблокировкам (deadlocks), если транзакции запрашивают блокировки в разном порядке.
- В PostgreSQL можно добавить `NOWAIT`, чтобы запрос сразу завершался с ошибкой, если строки уже заблокированы.
Подходит для критичных операций, например, финансовых транзакций.