что произойдет, если две транзакции одновременно обращаются к одним и тем же данным? - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть вопрос, который я озадачен


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 может произойти

...