Bazy danych · Middle · Pytanie 18 z 75
Czym jest „utracona aktualizacja” (lost update) i jak jej zapobiec?
-- Dwa żądania jednocześnie:
SELECT balance FROM accounts WHERE id = 1; -- oba czytają 100
UPDATE accounts SET balance = 150 WHERE id = 1; -- +50
UPDATE accounts SET balance = 130 WHERE id = 1; -- +30- 1Dodaj indeks na
balance - ✓Poprawna odpowiedź: Jedna zmiana nadpisuje drugą; użyj atomowej aktualizacji (
SET balance = balance + 50),SELECT ... FOR UPDATEalbo blokowania optymistycznego - 3W PostgreSQL to niemożliwe
Wyjaśnienie
Klasycznym źródłem jest „odczytaj-zmień-zapisz” w kodzie aplikacji. Niech arytmetykę wykona baza, albo zablokuj lub wersjonuj wiersz.