SELECT FOR UPDATE и SELECT FOR SHARE — это конструкции SQL, используемые для блокировки строк при выборке, но с разными целями и уровнями блокировки.
Чем отличается SELECT FOR UPDATE от SELECT FOR SHARE?
SELECT FOR UPDATE и SELECT FOR SHARE — это конструкции SQL, используемые для блокировки строк при выборке, но с разными целями и уровнями блокировки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
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 — для совместного доступа с запретом на изменение.