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、死锁

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容