如果两个事务同时访问相同的数据会怎样?

时间:2019-11-10 05:49:55

标签: database concurrency transactions

我有一个问题被困住


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都同时更新了同一张表(位置)和同一行(奖金)(即,它们的两个第一方面都影响相同的数据)

知道这是不可能的,因为两个事务同时执行还是我创建的情况正确吗?

我回答的理由: T1更新位置然后将其锁定。 T2尝试更新排名,但无法更新。 T2尝试读取但由于T1将其锁定而无法读取,因此导致死锁。 T1来了,这样T2就可以发生

0 个答案:

没有答案