InnoDB

  1. INNODB表是索引组织的表,主键是聚集索引,非主键索引都包含主键信息。

  2. INNODB默认是行锁。

  3. INNODB行锁是通过给索引项加锁来实现的,即只有通过索引条件检索数据,InnoDB才使用行级锁,否则将使用表锁。

InnoDB行锁实现方式

InnoDB行锁是通过给索引上的索引项加锁来实现的,如果没有索引,InnoDB将通过隐藏的聚集索引来对记录加锁。InnoDB行锁分为3种情形。

  • Record lock:对索引项加锁。

  • Gap lock:对索引项之间的“间隙”、第一条记录前的“间隙”或最后一条记录后的“间隙”加锁。

  • Next-key lock:前两种的组合,对记录及其前面的间隙加锁。

InnoDB这种行锁实现特点意味着:如果不通过索引条件检索数据,那么InnoDB将对表中的所有记录加锁,实际效果跟表锁一样!

在实际应用中,要特别注意InnoDB行锁的这一特性,否则可能导致大量的锁冲突。

Oracle

  1. 在Oracle的每行数据上,都有一个标志位来表示该行数据是否被锁定。这样就大大减小了行级锁的维护开销,数据行上的锁标志一旦被置位,就表明该行数据被加X锁,Oracle在数据行上没有S锁。

  2. 许多对Oracle不太了解的技术人员可能会以为每一个TX锁代表一条被封锁的数据行,其实不然。TX的本义是Transaction(事务),当一个事 务第一次执行数据更改(Insert、Update、Delete)或使用SELECT… FOR UPDATE语句进行查询时,它即获得一个TX(事务)锁,直至该事务结束(执行COMMIT或ROLLBACK操作)时,该锁才被释放。所以,一个TX 锁,可以对应多个被该事务锁定的数据行。

  3. ORACLE的行级锁 只是数据块头的ITL、数据行头的LB锁标识位,不需要消耗额外的资源。需要注意的是事务并不是被行阻塞,而是被其它的事务阻塞。所以某些数据库就有锁升级机制,而ORACLE没有。ORACLE的行级锁 只是数据块头的ITL、数据行头的LB锁标识位,不需要消耗额外的资源。

转自:https://blog.51cto.com/ultrasql/1837368

最新文章

  1. GitLab CI持续集成配置方案
  2. Android 在地图上画矩形
  3. Learning to write a compiler
  4. python arguments *args and **args ** is for dictionaries, * is for lists or tuples.
  5. Python超级程序员使用的开发工具
  6. 2014年度辛星html教程夏季版第八节
  7. C++ 11 笔记 (五) : std::thread
  8. bzoj2052: Pku1777 Vivian
  9. 2017Java技术预备作业1501黄学超
  10. FreeMaker开发教程
  11. 十五、Hadoop学习笔记————Zookeeper客户端的使用
  12. Python-Django 路由控制器
  13. PHP jsonp ajax 跨域 实例
  14. c++入门之初话结构体
  15. Internet spirit
  16. 【转】Influxdb 编译
  17. day17--JQuery选择器
  18. linux下mysql 8.0安装
  19. 两个DIV并排显示
  20. 戴尔poweredge r730服务器配置及系统安装详解教程

热门文章

  1. xpath进阶
  2. java 将数据库中的每一条数据取出放入数组或者List中
  3. iOS打印各种类型数据
  4. NuGet-Doc:NuGet.Server
  5. WingIIDE 6的licese破解方法(支持python3)
  6. Eclipse总是自动跳到ThreadPoolExecutor
  7. Vagrant 手册之 Vagrantfile - 最低版本
  8. sql 优化建议
  9. node+express解决前端跨域问题
  10. 继承Process类,另一种方法计算累加和以及阶乘