关于Oracle共享锁的问题

对于Oracle表级共享锁,有点想不明白,A锁住表T之后,B可以读T,不能改T,这个功能完全可以只用一个锁的概念(独占锁)就可以实现,为什么还要加一个共享锁的概念呢?
刚做了如下的实验:
会话A在T上加S锁
数据:A可以修改数据,会话B不能修改数据。
结构:A可以修改表结构,会话B不能修改表结构。
锁:会话B可以加S锁,但不能加X锁

会话A给T加X锁
数据:A可以改数据,会话B不能修改数据
结构:A可以改结构,会话B不能改结构
锁:会话B不能加S锁,也不能加X锁。

从上面的实验可以看出,共享锁和独占锁,在表数据和表结构上的功能是完全一样的,请问为什么要在这里把表级锁分成共享锁和独占锁呢?

1个回答

本人也是菜鸟,我说一下我的理解,共享锁的目的就是别人还可以查数据但是不能改,如果只用独占锁的话,别人也不能查数据了,那样读数据库的效率就太低了。

u012427018
鼬佐 回复roofwei: 有这么一种场景,甲和乙在访问同一张表,甲说我访问的时候不允许别人修改表,乙也说我访问的时候不允许别人修改表,如果不用共享锁的话,怎么实现。
大约 4 年之前 回复
roofwei
roofwei 独占锁,别人可以查的。任何锁是不会阻止其他人查数据的
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问