我有一个问题被困住
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就可以发生