美文网首页数据分析专栏
ORACLE的表锁与行锁

ORACLE的表锁与行锁

作者: Viva_Stephen | 来源:发表于2020-02-12 16:57 被阅读0次

没有并发就没有锁
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的表锁与行锁

    没有并发就没有锁Enqueues 队列型锁,队列阻塞 锁的原则 1、只有被修改时,行才会被锁定。2、当一条语句修改...

  • InnoDB引擎的锁实现方法

    行锁 InnoDB行锁是通过给表上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对...

  • mysql中的"锁"事儿总结

    定义 关于mysql中的锁,是用于管理不同事务对共享资源的并发访问的问题,分为行锁和表锁。 表锁与行锁的区别: 锁...

  • MySQL听讲(四)——数据库锁

    数据库的锁分为全局锁、表锁、行锁。 科普 锁的缩写:MDL(metadata lock):元数据锁。 全局锁 表锁 行锁

  • InnoDB引擎的行锁和表锁

    在Mysql中,Innodb数据引擎支持行锁和表锁,Myisam数据引擎只支持表锁 1 行锁和表锁 行锁是通过索引...

  • 总结Mysql中的锁

    MySQL中的锁 概述 MyISAM支持表锁,InnoDB支持表锁和行锁,默认为行锁 表级锁:开销小,加锁快,不会...

  • FOR UPDATE的使用

    利用select * for update 可以锁表/锁行。自然锁表的压力远大于锁行。所以我们采用锁行。什么时候锁...

  • MySQL知识点

    Mysql中有哪几种锁? MyISAM支持表锁,InnoDB支持表锁和行锁,默认为行锁 表级锁:开销小,加锁快,不...

  • 锁颗粒

    表锁 行锁

  • Mysql-锁

    锁 by shihang.mai 项目MyisamInnodb锁粒度表锁行锁或者表锁写锁/排他锁lock tabl...

网友评论

    本文标题:ORACLE的表锁与行锁

    本文链接:https://www.haomeiwen.com/subject/vfecfhtx.html