Sobes.tech
Назад к вопросам
Senior
4

Чем отличается SELECT FOR UPDATE от SELECT FOR SHARE?

Компании, где спрашивали
Cloud.ru

Ответ от нейросети

sobes.tech AI

SELECT FOR UPDATE и SELECT FOR SHARE — это конструкции SQL, используемые для блокировки строк при выборке, но с разными целями и уровнями блокировки.

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

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

Пример:

BEGIN;
SELECT * FROM accounts WHERE id = 1 FOR UPDATE;
-- теперь можно безопасно обновлять запись
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;

Таким образом, FOR UPDATE используется для эксклюзивной блокировки с целью изменения, а FOR SHARE — для совместного доступа с запретом на изменение.