关于 MySQL 锁 你知道多少

1、简介

​  MySQL 锁 是指 同一时间同一资源只能被一个线程访问。而 锁 正是 数据库系统 区别于 文件系统 的一个关键特性,锁机制 用于管理对共享资源的并发访问。

2、MySQL 锁 的分类

2.1、锁 的类型

  • 共享锁(S Lock 即 读锁):对于同一个数据对象,多个事务可以同时对其进行 读操作 而不会相互影响

    • Select * from table_name where ... lock in share mode;
  • 排它锁(X Lock 即 写锁):对于同一个数据对象,若 当前事务 的 写操作 还未完成,其它事务 都不能对其进行 读 / 写 操作
    • Select * from table_name where ... forupdate;

2.2、锁 的粒度

  • 行级锁:只对 当前操作的行 进行加锁(粒度最小)
  • 表级锁:对 当前操作的表 进行加锁(粒度最大)
  • 页锁:可以 锁定 相邻的一组记录(粒度居中)

2.3、锁 的算法

  • Intention Lock(意向锁):想要 锁定 某几行记录

  • Record Lock(记录锁):锁定 单行记录

  • Gap Lock(间隙锁):锁定一个范围,但不包含 当前操作的记录

  • Next-Key Lock:锁定一个范围,且包含 当前操作的记录(相当于 Gap Lock + Record Lock)


补充:

​  InnoDB 支持的意向锁:

  • 意向共享锁(IS Lock),事务 想要 获得一张表中某几行的共享锁
  • 意向排他锁(IX Lock),事务 想要 获得一张表中某几行的排他锁

2.4、锁 的兼容

​  若一个事务(A)已经获取了 记录(R)的共享锁,而另一个事务(B)也可以同时获取 记录(R)的共享锁,这种情况称之为 锁兼容;

​  若另一个事务(C)想获取 记录(R)的排他锁,则它必须等待事务(A)、事务(B)释放 记录(R)上的共享锁,这种情况称之为 锁不兼容。

锁的兼容表:

S X IS IX
S 兼容 不兼容 兼容 不兼容
X 不兼容 不兼容 不兼容 不兼容
IS 兼容 不兼容 兼容 兼容
IX 不兼容 不兼容 兼容 兼容

 记忆小技巧:意向锁与意向锁都兼容,排他锁与其它锁都不兼容,意向排他锁与非意向锁都不兼容,共享锁与(意向)共享锁兼容,意向共享锁只与排他锁不兼容。

2.5、加锁机制

  • 乐观锁(不加锁)

    ​  总是假设最好的情况,每次去拿数据时都认为别人不会修改,所以每次都不会上锁。只在更新的时候会判断一下在此期间别人有没有去更新这个数据,然后根据不同结果进行相对应的操作 —— 通过记录这个数据的版本号,每次更新前会先查询版本号,看看版本号是否发生变动,如果没有发生变动,就将版本号更新(加1);如果发生变动,就进行回滚。

  • 悲观锁(加锁)

    ​  总是假设最坏的情况,每次去拿数据时都认为别人会修改数据,所以每次都会上锁。

3、MySQL 死锁

​  当 两个 或 两个以上 的事务 在执行过程中,因 争夺锁资源 而造成了一种相互等待的现象,即死锁。

​ 解决死锁的方法:

  • 超时机制(被动)

    ​  给每个事务都设一个 死锁等待时间,当 死锁 发生时,一旦相互等待的时间超过了某一个事务(A)的 死锁等待时间,事务(A)就会进行回滚,而另一个事务(B)就能够解除死锁,继续执行。

  • wait-for graph(等待图机制)(主动)

    ​  利用 MySQL数据库 保存的 锁的信息链表 和 事务等待链表 构造成一张等待图,如果这张图中存在回路(代表存在死锁),MySQL数据库(InnoDB 引擎)将会选择 回滚 造成回路中 undo 量最小的事务,解除回路。

关于 MySQL 锁 你知道多少相关推荐

  1. mysql锁表_MYSQL锁表问题的解决方法

    本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sq ...

  2. 57张图,13个实验,干死 MySQL 锁!

    你好,我是yes. 前段时间写了一篇关于 MySQL 锁的文章,一些小伙伴们在阅读之后产生了一些疑问,这些问题还挺有代表性的,所以在这里做个实验,来用事实探究一番. 那篇文章提到了记录锁(Record ...

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

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

  4. 什么是MySQL锁?有哪些锁类型?如何使用?

    什么是MySQL锁?有哪些锁类型?如何使用? Mysql中有哪几种锁? 行级锁:锁定力度小,发生锁冲突概率低,实现并发度高,开销大,加锁慢,并发度高 页级锁:加锁时间比行锁长,页级锁开销介于表锁和行锁 ...

  5. mysql三锁,mysql锁机制之表锁(三)

    顾名思义,表锁就是一锁锁一整张表,在表被锁定期间,其他事务不能对该表进行操作,必须等当前表的锁被释放后才能进行操作.表锁响应的是非索引字段,即全表扫描,全表扫描时锁定整张表,sql语句可以通过执行计划 ...

  6. MySQL锁表解决方法

    MySQL锁表解决方法 参考文章: (1)MySQL锁表解决方法 (2)https://www.cnblogs.com/xiaoL/p/11099291.html 备忘一下.

  7. MYSQL锁表问题解决

    MYSQL锁表问题解决 参考文章: (1)MYSQL锁表问题解决 (2)https://www.cnblogs.com/wenxiaobin/p/8574296.html 备忘一下.

  8. Mysql 锁的机制

    2019独角兽企业重金招聘Python工程师标准>>> 引言 数据库锁定机制简单来说就是数据库为了保证数据的一致性而使各种共享资源在被并发访问变得有序所设计的一种规则:对于任何一种数 ...

  9. 怎么操作会导致MySQL锁表

    怎么操作会导致MySQL锁表 转载于:https://www.cnblogs.com/luao/p/10867785.html

  10. 01 MySQL锁概述

    锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O 等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所有 ...

最新文章

  1. 算法系列8《Base64》
  2. Linux:常用命令大全
  3. bat文件先杀掉端口号,然后启动jar包
  4. 用URLGather来管理和保存你的页面
  5. 复杂性思维第二版 二、图
  6. Java中的基本类型和引用类型(未完)
  7. VS2015+OpenGL配置方法
  8. ./configure:command not found 解决方法
  9. scala if 语句缩写_Scala If-Else语句示例教程
  10. 用easyx画五角星_冷军画了一把破剪刀, 竟然卖到了160万,被专家抨击:乱涂鸦!得奖后专家顿时不说话了...
  11. 特征级融合_多知识图谱的融合算法探索
  12. 那些年,我们一起学过的汇编----之子程序设计
  13. 海康威视视频监控客户端开发实践
  14. arm开发板无法使用dns解析问题
  15. 分治算法解决问题(c语言)
  16. bwl老二吃嘲讽吗_魔兽世界怀旧服防战bwl拉boss技巧
  17. k8s部署apollo
  18. Could not launch “” Domain: IDEDebugSessionErrorDomain Code: 3 Failure Rea
  19. Android初学 抖音短视频无水印下载APP的实现
  20. 【2023】Eclipse 安装教程

热门文章

  1. MXDP 力量的崛起
  2. 多旋翼姿态控制中前馈的作用
  3. jsch连接mysql_使用jsch连接数据库
  4. 微信公众号php空间,php 微信公众号对接一些点
  5. LLMs:MMLU基准(大规模多任务语言理解)的简介(MMLU-ZS/MMLU-FS)、安装、使用方法之详细攻略
  6. 了不起的 Webpack Scope Hoisting 学习指南
  7. iOS上传——ERROR ITMS-90085: “No architectures in the binary. Lipo failed to detect any architectures in
  8. 做一个小exe,双击它使用指定的浏览器打开指定的网页
  9. [转载]健康养肾的最佳动作(图)
  10. 第八届ACM山东省赛 F quadratic equation