1、Oracle锁类型
锁的作用:保护数据
latch锁:chain,链(优化)
LOCK锁
排他锁(X)
共享锁(S)
体验:
update scott.emp
set ename=ename||'a'
where empno='7369'
/
解锁:rollback、commit
update scott.emp
set ename=ename||'a'
where empno='7369'
/
并不影响:
select *
from scott.emp
where empno=7369
2、行级锁:DML语句
事务锁TX
锁的结构
事务锁的加锁和解锁过程
只有排他锁
不影响读(CR块)
3、表级锁:TM
加入一个进程A更新一个表中的数据,更新多条,进程A 对已表就会产生三种锁:在每一行加了行级锁、
事务锁(事物锁:TX)、表级锁(表级锁:TM 名字:RX)。
RX这个表级锁 是兼容。
当一个用户要删除这个表时,要为这个表加一个x锁,但是RX和x是不能同时存在的。因此另一个用户不能删除该锁。
行级排他锁(Row exclusive)RX锁
当我们进行DML时,会自动在被更新的表上添加RX锁,可以执行LOCK命令显式的在表上添加RX锁
允许其他事务通过DML语句修改相同表里的其他数据行
允许使用lock命令对表添加RX锁定
不允许其他事务对表添加X锁
行级共享锁(Row Shared,简称RS锁)
select … from for update
共享锁(Share,简称S锁)
通过lock table in share mode命令添加该S锁
排他锁(Exclusive,简称X锁)
通过lock table in exclusive mode命令添加X锁
共享行级排他锁(Share Row Exclusive,简称SRX锁)
通过lock table in share row exclusive mode命令添加SRX锁
锁的作用:保护数据
latch锁:chain,链(优化)
LOCK锁
排他锁(X)
共享锁(S)
体验:
update scott.emp
set ename=ename||'a'
where empno='7369'
/
解锁:rollback、commit
update scott.emp
set ename=ename||'a'
where empno='7369'
/
并不影响:
select *
from scott.emp
where empno=7369
2、行级锁:DML语句
事务锁TX
锁的结构
事务锁的加锁和解锁过程
只有排他锁
不影响读(CR块)
3、表级锁:TM
加入一个进程A更新一个表中的数据,更新多条,进程A 对已表就会产生三种锁:在每一行加了行级锁、
事务锁(事物锁:TX)、表级锁(表级锁:TM 名字:RX)。
RX这个表级锁 是兼容。
当一个用户要删除这个表时,要为这个表加一个x锁,但是RX和x是不能同时存在的。因此另一个用户不能删除该锁。
行级排他锁(Row exclusive)RX锁
当我们进行DML时,会自动在被更新的表上添加RX锁,可以执行LOCK命令显式的在表上添加RX锁
允许其他事务通过DML语句修改相同表里的其他数据行
允许使用lock命令对表添加RX锁定
不允许其他事务对表添加X锁
行级共享锁(Row Shared,简称RS锁)
select … from for update
共享锁(Share,简称S锁)
通过lock table in share mode命令添加该S锁
排他锁(Exclusive,简称X锁)
通过lock table in exclusive mode命令添加X锁
共享行级排他锁(Share Row Exclusive,简称SRX锁)
通过lock table in share row exclusive mode命令添加SRX锁
lock table in [row share][row exclusive][share][share row exclusive][exclusive] mode;
4、锁的兼容性
5、加锁语句以及锁的释放
锁之间的兼容性:
加锁语句:
注意:
1、当用户感觉数据库操作比较慢时,可能并不是数据的负载比较的大,而是锁的原因
2、没有锁就没用并发,因为锁所以并发。然而锁限制类并发(当两个用户对一条数据同时操作时)