Sql 为什么在UPDATE语句中使用此表的内部SELECT时Oracle会锁定表?

Sql 为什么在UPDATE语句中使用此表的内部SELECT时Oracle会锁定表?,sql,oracle,concurrency,locking,consistency,Sql,Oracle,Concurrency,Locking,Consistency,正如官方所知 读者永远不会阻挡作家 但我对我的Oracle应用程序感到惊讶 遵循内部选择语句(来自人员表) 锁定PERSON表上的任何其他(更新或插入)语句 直到上面更新管理器语句提交或回滚 有什么帮助吗?为什么 如何知道在这种情况下获得的锁的类型?读卡器从不阻止写卡器-该短语表示SELECT语句(读卡器)从不阻止写卡器(INSERT+UPDATE+DELETE语句)。虽然问题中没有任何读者(我在那里看不到SELECT语句),但有两个作者(update+insert)。在这种情况下,这句话是不正

正如官方所知
读者永远不会阻挡作家

但我对我的Oracle应用程序感到惊讶
遵循
内部选择
语句(来自
人员
表)

锁定PERSON表上的任何其他(更新或插入)语句
直到上面
更新
管理器
语句提交或回滚

有什么帮助吗?为什么
如何知道在这种情况下获得的锁的类型?

读卡器从不阻止写卡器
-该短语表示SELECT语句(读卡器)从不阻止写卡器(INSERT+UPDATE+DELETE语句)。虽然问题中没有任何读者(我在那里看不到SELECT语句),但有两个作者(update+insert)。在这种情况下,这句话是不正确的,编写者有时会互相阻止。是什么让你认为PERSON被锁定了?@BobC在尝试插入/更新PERSON的任何记录时。。。会话等待更新管理器语句完成(提交或回滚)@YajliMaclo这两个表上有什么索引和约束?这些表是通过外键链接的吗?
UPDATE MANAGER m
SET 
m.manager_name  =
    (
        SELECT p.person_name
        FROM PERSON p
        WHERE p.person_code = (m.manager_code)
    )
;