Бази даних · Middle · Запитання 18 з 75
Що таке «втрачене оновлення» і як йому запобігти?
-- Два запити одночасно:
SELECT balance FROM accounts WHERE id = 1; -- обидва читають 100
UPDATE accounts SET balance = 150 WHERE id = 1; -- +50
UPDATE accounts SET balance = 130 WHERE id = 1; -- +30- 1Додати індекс на
balance - ✓Правильна відповідь: Одна зміна перезаписує іншу; використовуйте атомарне оновлення (
SET balance = balance + 50),SELECT ... FOR UPDATEабо оптимістичне блокування - 3У PostgreSQL це неможливо
Пояснення
Класичне джерело - «прочитати-змінити-записати» в коді застосунку. Нехай арифметику робить база, або блокуйте чи версіонуйте рядок.