database - 在一个事务中解锁共享锁是否依赖于另一个事务中随后给出的共享锁?
问题描述
我需要证明,如果两个事务在一个表上持有一个共享锁,则后者不能从最后一个获得锁的事务中删除。
我怎样才能做到这一点?
解决方案
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
推荐阅读
- node.js - 为什么所有 npm 命令都显示以下错误?
- grafana - Grafana singlestat 值颜色
- .net - 尝试使用 google Api 生成组织结构图,但似乎不起作用。就像 Ajax 代码没有触发一样
- regex - 如何使用正则表达式从 python 中的字符串打印印地语字符?
- mongodb - 聚合MongoDB中的条件
- python - 爬虫维基:今日图片
- sql - 当在表中添加特定列时
- r - 无法安装usethat?
- python - python - 使用PyTest进行python测试时如何模拟对象?
- javascript - 如何在网站的页面刷新上保存切换按钮的“开/关”模式?