我有三张桌子。他们是STAFF,SUBTASK和DEVICE。当STAFF被锁定(select * from staff for update
)时,我无法更新SUBTASK(在更新之前,我已在STAFF中选择)。但是当STAFF表未锁定且DEVICE表被锁定时,我可以更新SUBTASK。
STAFF_ID是SUBTASK的外键,但是我没有在Oracle和hbm文件中的两个表之间创建约束(我正在使用Hibernate)。
请为我解释。感谢
答案 0 :(得分:0)
最有可能存在从子任务到工作人员的外键。然后,当您选择更新员工时,效果与您修改员工时的效果相同。你可以,例如(1)从员工中删除一行。在子任务中,你可以(2)更新外键,使其指向不同的一行人员。
在这种情况下,oracle无法知道(2)是否成功。如果外键指向刚刚在(1)中删除的人员行,则如果(1)选择回滚交易,则操作仍然可以成功。
所以oracle块(2)直到(1)被提交或回滚。