我想要确定的是隔离级别和锁之间是否存在任何直接关系。那么,假设我启动了一个具有可序列化隔离级别的事务,那么 Oracle 默认情况下会在该事务中列出的所有表上获取某种类型的“表”锁,如果是这样,那么它是什么?
我找不到这个问题的任何直接答案,但通过阅读许多在线文档,我自己的理解是,隔离级别和锁之间没有直接关系。将根据事务中存在的特定 SQL 语句获取锁,而不是根据事务隔离级别是读已提交还是可序列化,因此如果存在 DML,则将获取读独占表锁 (RX),如果存在像
LOCK TABLE table IN EXCLUSIVE MODE;
这样的语句将获取独占表锁 (X)。
请注意,这个问题非常特定于 Oracle,并且非常特定于可串行化隔离级别获取哪个锁。我绝不是在寻找与 Oracle 中可用的隔离级别和锁相关的答案,我已阅读在线文档并理解它们。
我也在 Ask Tom 上问了同样的问题,并且很客气地 Ask Tom 证实了我的理解 - 简而言之,隔离级别和锁之间没有直接关系。将根据事务中存在的特定 SQL 语句获取锁,而不是根据事务隔离级别是读已提交还是可序列化,因此如果存在 DML,则将获取读独占表锁 (RX),如果存在像
LOCK TABLE table IN EXCLUSIVE MODE;
这样的语句将获取独占表锁 (X)。