ORACLE的表锁与行锁

没有并发就没有锁
Enqueues 队列型锁,队列阻塞

锁的原则

1、只有被修改时,行才会被锁定。
2、当一条语句修改了一条记录,只有这条记录上被锁定,不存在锁升级。
3、当某行被修改时,将阻塞别人对它的修改。
4、当一个事物修改一行时,将在这个行上加上锁(TX),用于阻止其他事物对相同行的修改。
5、读不会阻塞写,除了select ...for update,这个会导致整个表锁(TM)使其它会话无法修改,删除和增加
6、写永远不会阻塞读
7、当一行被修改后,ORACLE通过回滚段提供给数据的一致性
8、插入一行,未提交,只要不插入相同的主键,则可以同时插入。
9、插入不影响,修改,修改不影响插入。

2、TM锁和TX锁

TM表锁,发生在insert,update,delete以及select for update 操作时,目的是保证操作能够正常进行,并且组织其他人对表执行DDL操作。

TX锁事物锁(行锁)对于正在修改的数据,阻止其他会话进行修改。

3、RI锁--基于引用关系的锁定

当对具有主外键关系的表做DML操作时,锁定不单单发生在表上,相应的引用表上也可能加上相应的锁。

在主表或从表中insert 会给主表和从表都加上一个锁,而delete和update则不会。

4、BI锁和外键索引,没有锁的外键

在给主表修改数据的时候,需要给从表外键扫描和上锁,如果从表外键没有索引,则需要全表扫描,特别慢。

如果外键有索引,则从表不需要修改,从索引扫描,如果存在该字段则报错。

5、死锁

两个会话,相互等对方资源。

你可能感兴趣的:(ORACLE的表锁与行锁)