引用: 共享锁(S): 小明和小胖是好朋友,有一天他们俩得到了一份纸质版且纸比较破武功秘籍,为了让这份武功秘籍不再丢失什么内容,于是就用一个玻璃盒子存储起来。
![]()
这时候小胖提议在盒子上加了一把锁,保护好里面的内容不被破坏。
加上锁之后,大家都能看,但是不能修改,难度增大了!大家都看到你们加锁了,并且这东西是免费的,所以我也要加锁,于是
这秘籍的外表框上加上了很多的锁,这些锁统称为共享锁(S) 我们通过图可以直到,共享属锁加上之后,我们只能看到秘籍(内容),但是想撕去一点点秘籍或修改上面的内容都不行,所以大家都只能看,不能修改,这就是共享锁为什么又称为读锁的原因。 如果要修改上面的内容或者换一本秘籍在玻璃里面展示的话,这个时候需要将所有的锁都去除掉,才能操作,否则就只能看 排它锁(X): 同样,有一本武功秘籍,这次被小胖捡到了,于是:
![]()
这个时候小明来了,看到之后
于是,这个箱子被小胖加上了排它锁(X),别人看不到也修改不了里面的内容,同时别人想加上其他锁也不能。
最后,不过小胖给了小明一个排它锁的钥匙,这个时候小明也能看箱子里面的内容,同时也可以修改箱子里面的内容。
根据保护对象的不同,单实例Oracle数据库锁可以分为以下几大类: DML lock(data locks,数据锁):用于保护数据的完整性; DDL lock(dictionary locks,字典锁):用于保护数据库对象的结构(例如表、视图、索引的结构定义); internal locks,latches,mutex,pin:保护内部数据库结构; 本文主要讨论DML(也可称为data locks,数据锁)锁。从封锁粒度(封锁对象的大小)的角度看,Oracle DML锁共有两个层次,即行级锁和表级锁。
有两种类型:显式锁定和隐式锁定。Oracle锁被自动执行,并且不要求用户干预的锁为隐式锁。对于SQL语句隐式锁是必须的,依赖被请求的动作。隐式锁定除SELECT外,对所有的SQL语句都发生。用户也可以手动锁定数据,这是显式锁定。