首页 > 解决方案 > 在一个事务中解锁共享锁是否依赖于另一个事务中随后给出的共享锁?

问题描述

我需要证明,如果两个事务在一个表上持有一个共享锁,则后者不能从最后一个获得锁的事务中删除。

我怎样才能做到这一点?

标签: databaseoracleplsqllocking

解决方案


Share Table Locks (S)

为以下语句中指定的表自动获取共享表锁:

LOCK TABLE table IN SHARE MODE;

以下是允许的操作:

  • 一个share table lock事务持有的一个事务只允许其他事务来SELECT(查询表)
  • 使用 SELECT ... FOR UPDATE 锁定特定行
  • 或执行 LOCK TABLE ... IN SHARE MODE

语句成功。

其他事务不允许更新。多个事务可以同时持有同一个表的共享表锁。在这种情况下,没有事务可以更新表(即使事务持有行锁作为SELECT带有 的语句的结果FOR UPDATE clause)。因此,只有在没有其他事务在同一个表上也具有共享表锁的情况下,具有共享表锁的事务才能更新表。

如果你想要一个例子,你可以参考下面的链接:

http://oracledbascriptsfromajith.blogspot.com/2011/10/oracle-locking.html


推荐阅读