当前位置: 首页 > news >正文

MySQL的行锁、间隙锁和临建锁

目录

行锁

间隙锁&临键锁


行锁

InnoDB实现了以下两种类型的行锁:

  • 共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排它锁。

    //共享锁和共享锁兼容,共享锁和排他锁互斥。

  • 排他锁(X):允许获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁。

    //一个事务获取到排他锁,可以更新;其他事务不能再获取共享、排他锁。

两种行锁的兼容情况如下:

常见的SQL语句,在执行时,所加的行锁如下:

  • insert、update、delete会自动加 排他锁

  • select不加锁

  • select ... lock in share mode 共享锁

  • select ... for update 排他锁

默认情况下,InnoDB在 REPEATABLE READ(可重复读)事务隔离级别运行,InnoDB使用 next-key (临键锁)锁进行搜索和索引扫描,以防止幻读。

  • 对唯一索引检索时,对已存在的记录进行等值匹配时,将会自动优化为行锁

  • InnoDB的行锁是针对于索引加的锁,不通过索引条件检索数据,那么InnoDB将对表中的所有记录加锁,此时 就会升级为表锁

间隙锁&临键锁

默认情况下,InnoDB在 REPEATABLE READ事务隔离级别运行,InnoDB使用 next-key (临键锁)锁进行搜索和索引扫描,以防止幻读。

  • 索引上的等值查询(唯一索引),给不存在的记录加锁时, 优化为间隙锁 。

  • 索引上的等值查询(非唯一普通索引),向右遍历时最后一个值不满足查询需求时,next-key lock 退化为间隙锁。

  • 索引上的范围查询(唯一索引)--会访问到不满足条件的第一个值为止。

注意:

间隙锁唯一目的是防止其他事务插入间隙。间隙锁可以共存,一个事务采用的间隙锁不会阻止另一个事务在同一间隙上采用间隙锁。

相关文章:

  • wordpress api 自定义认证/企业营销策划方案范文
  • 想给公司做个网站怎么做/网络营销推广方案3篇
  • php wordpress教学/google搜索中文入口
  • 做响应网站的素材网站有哪些/广告联盟全自动赚钱系统
  • 网站开发湛江/nba最新交易一览表
  • tp框架可以做网站吗/西安百度公司地址介绍
  • SpringSecurity:前后端分离项目中用户名与密码通过国密算法SM2加密传输
  • UE4创建可以交互的Pickup效果和声音
  • go语言代码练习
  • Python 多进程处理数据
  • 线程池7个参数详解
  • 高项 23 项目管理成熟度模型
  • 牛客网之SQL刷题练习——一个实用的网站
  • ts 类型学习
  • PHP基于thinkphp+vue共享单车系统 nodejs前后端分离
  • ubuntu 20.04 qemu linux6.0.1 制作ext4根文件系统
  • 面试总结day3:springboot多环境配置、如何优雅的停止线程、gateway作用应用场景
  • MyBatisPlus之多数据源