5

请任何人解释 Oracle 中的锁定模式,即共享、独占和更新锁。我发现了很多关于这个和根据那个的理论

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

排他锁:只允许一个用户/连接更改数据。

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

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

SQL> lock table emp in share mode;

Table(s) Locked.

SQL> update emp set sal=sal+10;

14 rows updated.

然后,我发现,用户可以在共享锁定后更改数据。那么,它与排他锁和更新锁的区别是什么。

另一个问题,更新锁和排他锁如何彼此不同,甚至它们看起来几乎相同。

4

2 回答 2

15

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

共享锁

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

下表很好地总结了锁和允许的内容。

在此处输入图像描述


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

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


此信息的来源以及有关 Oracle 锁的优秀读物

于 2017-11-19T22:29:39.707 回答
1

在文档中有很好的解释:http: //docs.oracle.com/cd/E11882_01/server.112/e41084/ap_locks001.htm#SQLRF55502

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

于 2013-04-10T21:36:18.677 回答