一、锁跟事务有关

mysql默认的事务隔离级别是:可重复读(RR)

二、共享锁(读锁/S锁)

1. 多个事务的查询语句,对同一数据,可以共享一把锁,都能访问到最新数据

2. 如果只有一个事务获取到了一个共享锁,可以更新、删除

3. 如果多个事务都获取到了同一个共享锁,多个事务都不可以更新、删除

4. 使用场景:多个事务都可以获取最新数据

三、排它锁(写锁/X锁)

1. 不能与其他锁共存,只有一个事务能拿到锁

2. 锁释放后,其他事务才能获取

3. 使用场景:一个事务进行查询、更新、删除操作

四、自增锁

1. 如果表中存在自增字段,MySql会自动维护一个自增锁

2. 当事务插入一条数据,自增+1,事务未提交时,查不到这条数据,提交后才能查到

五、记录锁(行锁)

1. 锁住一行记录

2. 阻止该行被其他事务操作(删除、更新、插入同样的ID)

六、间隙锁(gap lock)

1. 概念

a. 索引记录中有间隔,例如id字段上建了索引,表里有3条记录,id分别为1,3,5

b. 两条记录之间的间隔(1,3], (3,5]

c. 第一条索引之前的范围,即(-infinity,1]

d. 最后一条索引之后的范围,即(5,infinity]

e. 这种间隔或者范围之间的锁,叫做间隙锁,间隙是前开后闭原则

f. 间隙锁的作用:间隙内的数据,即一定范围内的数据,在锁定情况下,不发生变化

2. 产生间隙锁的条件

a. 使用普通索引锁定

b. 使用多列唯一索引

c. 使用唯一索引锁定多行记录

3. 只有在事务隔离级别为RR时,才会产生

4. 唯一索引:锁住多条记录,或者不存在的记录时,才会产生间隙锁

5. 普通索引:锁住单条、多条记录,都会产生间隙锁

6. 锁住该条记录相邻的两个键之间的空白区域,防止其他事务在这个范围内插入、修改、删除

7. 防止出现幻读,幻读是因为新增或更新操作,范围查询会出现数据不一致的问题

8. 如果事务隔离级别是RC,间隙锁将会失效

七、临键锁(next-key lock)

1. 记录锁和间隙锁的组合,既包含索引记录,又包含索引区间

2. 记录锁、间隙锁、临键锁都是排它锁

参考:

infinity mysql_MySql锁机制相关推荐

  1. insert 锁表 mysql_mysql insert锁机制【转】

    最近再找一些MySQL锁表原因,整理出来一部分sql语句会锁表的,方便查阅,整理的不是很全,都是工作中碰到的,会持续更新 笔者能力有限,如果有不正确的,或者不到位的地方,还请大家指出来,方便你我,方便 ...

  2. mysql锁机制——乐观锁、悲观锁;共享锁、排他锁、行表锁、间隔后码锁、MVCC 与 thinkphp的lock解析

    锁的引入 如果A有100元,同时对B.C转账,若处理是同时的,则此时同时读取A的余额为100元,在对两人转账后写回,A的余额不是0元而是50元.因此,为了防止这种现象的出现,要引入锁的概念,如只有在A ...

  3. 【java线程】锁机制:synchronized、Lock、Condition

    [Java线程]锁机制:synchronized.Lock.Condition 原创 2013年08月14日 17:15:55 标签:Java /多线程 74967 http://www.infoq. ...

  4. Linux内核中锁机制之完成量、互斥量

    在上一篇博文中笔者分析了关于信号量.读写信号量的使用及源码实现,接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题. 八.完成量 下面讨论完成量的内容,首先需明确完成量表示为一个执行单元需要等 ...

  5. MySQL优化篇:锁机制

    文章目录 1.概述 1.1 定义 1.2 分类 2.表锁(偏向于读操作) 2.1 特点 2.2 案例分析 2.3 案例结论 2.4 表锁分析 3.行锁(偏向于写操作) 3.1 特点 3.2 案例分析 ...

  6. 数据库锁机制为什么很重要?

    前言 在座的朋友们,你们的时间够用吗?想要成为一个成功的人吗?如果你们都有这样的疑惑,那就保持一刻谦虚的心态,跟着罗老师学习时间管理吧! 毕竟时间管理大师是一个用户访问多个资源,今天咱们来讲讲当多个用 ...

  7. 一文带你了解 MySQL 中的各种锁机制!

    MySQL中的锁机制,按粒度分为行级锁,页级锁,表级锁,其中按用法还分为共享锁和排他锁. 行级锁 行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁. 行级锁能大大减少数据库操作 ...

  8. 大厂面试官必问的Mysql锁机制

    前言 前几天有粉丝和我聊到他找工作面试大厂时被问的问题,因为现在疫情期间,找工作也特别难找.他说面试的题目也比较难,都偏向于一两年的工作经验的面试题. 他说在一面的时候被问到Mysql的面试题,索引那 ...

  9. python3多线程----锁机制

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # Version: python 3.6.3 # Tools: Pycharm 2017.3.3 __d ...

最新文章

  1. 10行代码实现目标检测,请收下这份教程
  2. python怎么开发安卓程序_怎样用python开发安卓app-到底如何使用Python开发Android程序.txt...
  3. python的for语句是否只有一种写法_跟老齐学Python之for循环语句
  4. C++调用matlab编程
  5. SAP UI5 应用开发教程之十八 - SAP UI5 数据绑定语法里的特殊符号,以及绝对绑定和相对绑定概念详解
  6. 上的img表示什么_方向盘上的SET、RES和CNL,表示什么意思?别弄错了
  7. 最新!2022互联网薪酬盘点,你达标了吗?
  8. GNS3模拟器中关于创建vtp时,内存空间不足问题的解决
  9. Spring基础——AOP
  10. 传感器绕着世界坐标系旋转产生的疑惑
  11. 【NLTK基础】一文轻松使用NLTK进行NLP任务(附视频)
  12. 安卓手机阅读器_得到电纸书阅读器到底如何,值不值得买?使用一个月后,我告诉你答案!...
  13. 重庆大学计算机学院王臣,重庆大学UMD研究生网络文化工作室学生干部述职大会暨换届选举大会圆满落幕...
  14. 为什么我每天都会使用坚果云
  15. oracle客户端免安装教程,免安装Oracle客户端软件
  16. PC机并口、并口扩展卡使用EPP模式通信,ECP SPP等
  17. Glide4 设置默认图片和错误图片,即设置占位图
  18. html加载页面转圈圈怎么打,js实现等待加载“转圈圈”效果
  19. mathtype中如何添加一个圆圈中间一个减号的符号
  20. JAVA动物园喂动物小实例

热门文章

  1. Angular2 RC6 Route学习
  2. vs 正则表达式替换
  3. inline hook学习
  4. c/c++字符串混淆工具
  5. android记录登录状态
  6. 1.3 字符串拼接(连接)
  7. 求1!+2!+3!+...+10!的值
  8. AtomicInteger原子性
  9. JSP页面Table的数据绑定
  10. Ping命令检测网站运行状态