oracle中有哪些不同类型的锁

Rav*_*avi 4 oracle locking

请任何人解释Oracle中的锁定模式,即共享,独占和更新锁定.我发现了很多这方面的理论

共享锁:没有人可以更改数据,只读目的

独占锁:只允许一个用户/连接更改数据.

更新锁:行被锁定,直到用户提交/回滚.

然后,我尝试共享以检查它是如何工作的

SQL> lock table emp in share mode;

Table(s) Locked.

SQL> update emp set sal=sal+10;

14 rows updated.
Run Code Online (Sandbox Code Playgroud)

然后,我发现,用户可以在共享锁定后更改数据.然后,它与独占锁和更新锁不同.

另一个问题,更新锁和独占锁如何彼此不同,即使它们看起来几乎相同.

hag*_*wal 11

发布未来访客的解释,它也给出了答案.

共享锁

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

下表是锁的一个很好的总结和允许的内容.

在此输入图像描述


由于很多用户都会关注这个问题所以我决定再往前走一步并提出我的学习笔记,我希望大家会从中受益:

在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述


这些信息的来源以及关于Oracle锁的优秀阅读.


Dav*_*dge 2

文档中对此进行了很好的解释。

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