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

MySQL 的锁

      • MySQL有哪些锁?
      • 各种锁的作用与使用场景
        • 全局锁
        • 表级锁
          • 表锁
          • 元素锁
          • 意向锁
          • AUTO-INC 锁
        • 行级锁
          • 记录锁
          • 间隙锁
          • 临键锁
      • 其他
        • 共享锁
        • 排他锁
        • 乐观锁
        • 悲观锁

MySQL有哪些锁?

  1. 全局锁
  2. 表级锁
    a. 表锁
    b. 元素锁
    c. 意向锁
    d. AUTO-INC 锁
  3. 行级锁
    a. 记录锁
    b. 间隙锁
    c. 临键锁

各种锁的作用与使用场景

全局锁

作用: 就是MySQL 全局上锁,所有的写操作全部阻塞
场景: 全库做逻辑备份的时候使用

表级锁
表锁

作用: 锁定一整个表的数据
场景: 在行锁出现前,一直使用的表锁解决并发读写问题;目前一般比较少用,性能影响比较大.

元素锁

作用: 锁定表的结构
场景: 在要对表的结构进行修改的时候会加

意向锁

作用: 协调行锁与表锁的关系,用于快速判断一个表是否上行锁锁,意向锁会与表级排他锁冲突.
场景:上行锁时候会使用,上表锁的时候先判断是否有意向锁冲突

AUTO-INC 锁

作用: 自增 id 的锁
场景: 定义了自增 id,在写入数据的时候

行级锁
记录锁

作用: 单行数据的锁
场景: 操作某行数据

间隙锁

作用: 某个范围条件的锁,一般用于避免数据幻读
场景: 操作某个范围的数据

临键锁

作用: 记录锁+间隙锁,范围内包含某个值
场景: 操作某个范围的(包含某个值)数据

其他

共享锁

简单理解就是读锁
共享锁可以与共享锁兼容(可同时读)

排他锁

简单理解就是写锁;
排他锁会与排他锁,共享锁都冲突(不可同时读写)

乐观锁
  • 虚拟的锁(并没有加锁),通过版本号解决并发问题,可以在写比较少的情况下,一定程度降低获取释放锁带来的 性能消耗
  • 乐观锁并不是 MySQL 提供的功能,而是手动实现的
  • 实现方案:
    数据增加一个版本号的字段(可以使用自增 或者当前时间戳),每次更新数据都先检查数据更新前后版本号是否一致,如果一致说明数据没有更改,可以直接写,如果不一致就说明数据已经被更改了,需要回滚,重新执行.

缺点: 在写操作比较多的情况下会出现大量的冲突回滚性能不佳.

悲观锁
  • 真正意义上的原子锁(真实的锁)

http://www.kler.cn/a/442279.html

相关文章:

  • 设计一个流程来生成测试模型安全性的问题以及验证模型是否安全
  • 一些常见的Java面试题及其答案
  • JVM直击重点
  • 51单片机——DS18B20温度传感器
  • Jenkins与不同阶段测试的完美结合
  • 2.slf4j入口
  • 如何更新项目中的 npm 或 Yarn 依赖包至最新版本
  • 编写工具模块
  • MyBatis的面试题以及详细解答
  • Java学习教程,从入门到精通,Java ConcurrentHashMap语法知识点及案例代码(63)
  • 探秘 JSON:数据交互的轻盈使者
  • 学技术学英文:代码中的锁:悲观锁和乐观锁
  • docker 安装 mongo 命令
  • 使用DPO技术对大模型Qwen2.5进行微调
  • YOLOv9-0.1部分代码阅读笔记-augmentations.py
  • List接口
  • HTML5 MathML
  • 【mysql】如何解决主从架构从库延迟问题
  • MybatisPlus介绍与应用
  • 泷羽sec学习打卡-brupsuite8伪造IP和爬虫审计
  • CTF_1
  • STM32-笔记4-按键点亮led
  • Jsckson @JsonValue 注解
  • springcloud打成jar包运行在centos7
  • 使用html2canvas库对可滚动的dom节点导出全量的图片
  • 【机器人】Graspness 端到端 抓取点估计 | 论文解读