У меня есть вопрос, который я озадачен
T1 T2
UPDATE POSITION
SET BONUS = SALARY/10
WHERE SALARY >100000;
UPDATE POSITION
SET BONUS = NVL(bonus,0) + &AdditionalBonus
WHERE SALARY < 400000;
--wait
SELECT PNUMBER,TITLE,SALARY,BONUS
FROM POSITION;
--wait
--deadlock detected
--abort
-COMMIT;
--restart T2
Я создал эту базу, полагая, что она правильная, но теперь я не верю, что это так. Моя проблема в этом случае заключается в том, что и T1, и T2 обновляют одну и ту же таблицу (Position) и одну и ту же строку (Bonus) в одно и то же время (т.е. обе их первые оценки влияют на одни и те же данные)
Зная, что это такневозможно, чтобы не было ошибок при одновременном выполнении обеих транзакций, или я правильно создал дело?
Мое обоснование моего ответа: T1 обновляет позиции, затем блокирует ее. T2 пытается обновить позицию, но не могу. T2 Пытается прочитать, но не может, поскольку T1 заблокировал его, что вызывает тупик. Т1 подходит, тогда Т2 может произойти