oracle中有哪些不同类型的锁

4sup72z8  于 2023-05-28  发布在  Oracle
关注(0)|答案(2)|浏览(180)

请任何人解释Oracle中的锁定模式,即共享、独占和更新锁。我发现了很多关于这个和那个的理论
共享锁:没有人可以更改数据,只读目的
专属锁:只允许一个用户/连接更改数据。
更新锁定:行被锁定,直到用户提交/回滚。
然后,我尝试了共享,以检查它是如何工作的

SQL> lock table emp in share mode;

Table(s) Locked.

SQL> update emp set sal=sal+10;

14 rows updated.

然后,我发现,用户可以改变数据后,共享锁定。那么,它与排他锁和更新锁有什么不同呢?
另一个问题,更新锁和排他锁有什么不同,即使它们看起来几乎是等同的。

niwlg2el

niwlg2el1#

  • 张贴解释为未来的访客,它也给出了答案。*

共享锁

  • 在我开始之前,让我先说有5种类型的表锁-行共享,行独占,共享,共享行独占和独占。共享锁就是其中之一。另外,请注意,还有行锁,这与表锁不同。按照我在最后提供的链接来阅读这一切。
  • 在以下语句-LOCK TABLE table IN SHARE MODE;中指定的表上获取共享锁
  • 此锁防止其他事务获得“行独占”(INSERT、UPDATE和DELETE语句使用此锁)、“共享行独占”和“独占”表锁,否则一切都是允许的。
  • 因此,这意味着共享锁将阻止其他事务在该表上执行INSERT、UPDATE和DELETE语句,但允许其他事务使用“SELECT...因为对于该语句,需要“行共享”锁,并且在需要“共享”锁时允许“行共享”锁。

下表是一个很好的总结锁和什么是允许的。

  • 由于很多用户会关注这个问题,所以我决定再进一步,并把我的学习笔记,我希望人们会从中受益:*

这些信息的来源,也是关于Oracle锁的优秀阅读。

qyzbxkaa

qyzbxkaa2#

在文档中有很好的解释。
在您的示例中,您在共享模式下锁定了表。这不会阻止其他会话在共享模式下锁定同一对象,但会阻止它们在独占模式下锁定该对象,以便在更新表(具有共享锁)时无法删除该表(需要独占锁)。

相关问题