Чем отличается SELECT FOR UPDATE от SELECT FOR SHARE?
Answer from AI
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 — для совместного доступа с запретом на изменение.