Назад к вопросам
Senior
3
Что такое SELECT FOR UPDATE и SELECT FOR SHARE? В чём разница?
Компании, где спрашивали
EXPERA
Ответ от нейросети
sobes.tech AI
SELECT FOR UPDATE и SELECT FOR SHARE — это конструкции SQL, используемые для блокировки строк при выборке данных в транзакциях, чтобы обеспечить согласованность и избежать конфликтов при параллельном доступе.
-
SELECT FOR UPDATE блокирует выбранные строки для последующего обновления. Другие транзакции не смогут изменить или заблокировать эти строки, пока текущая транзакция не завершится. Это эксклюзивная блокировка.
-
SELECT FOR SHARE (иногда
FOR SHARE MODE) устанавливает разделяемую блокировку на выбранные строки. Другие транзакции могут читать и устанавливать свои разделяемые блокировки, но не могут обновлять или удалять эти строки, пока блокировка действует.
Разница:
FOR UPDATE— блокировка для изменения (эксклюзивная), предотвращает любые изменения другими транзакциями.FOR SHARE— блокировка для чтения, разрешает совместное чтение, но запрещает изменения.
Пример:
BEGIN;
SELECT * FROM accounts WHERE id = 1 FOR UPDATE;
-- здесь можно безопасно обновить запись
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;