MySQL锁相关总结|悲观锁、乐观锁、读锁、写锁、表锁、行锁、页面锁、间隙锁、临键锁

MySQL锁总体结构

在这里插入图片描述

MySQL 的锁上可以分成三类:总体、类型、粒度。

  1. 总体上分成两种:乐观锁和悲观锁
  2. 类型上也是两种:读锁和写锁
  3. 锁的粒度上可以分成五种:表锁,行锁,页面锁,间隙锁,临键锁

下面我们就来详细讲一下这些锁

1. 悲观锁

悲观锁对于数据库中数据的读写持悲观态度,即在整个数据处理的过程中,他会悲观认为数据不会保持一致性,所以是会将相应的数据锁定。在数据库中,悲观锁的实现是依赖数据库提供的锁机制。

如果加上了悲观锁,那么就无法对这些数据进行读取操作。

2. 乐观锁

乐观锁对于数据库的数据的读写持乐观态度,即在整个数据处理的过程中,他会很乐观的认为数据会保持一致性,所以不加锁,而是通过数据版本记录机制实现。

MySQL中的MVCC多版本控制就是乐观锁的一种实现方式。

  1. 往往会在数据表中增加一个类型version的版本号字段。
  2. 在查询数据库中的数据时,会将版本号字段的值一起读取出来。
  3. 当更新数据时,会令版本号字段的值加1。将提交数据的版本与数据库表对应记录的版本进行对比。
  4. 如果提交的数据版本号大于数据表中当前要修改的数据的版本号,则数据进行修改操作。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-22 15:14:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-22 15:14:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-22 15:14:01       82 阅读
  4. Python语言-面向对象

    2024-02-22 15:14:01       91 阅读

热门阅读

  1. windows命令行加入与移除管理员组

    2024-02-22 15:14:01       57 阅读
  2. SpringBoot项目启动后执行指定方法的四种实现

    2024-02-22 15:14:01       53 阅读
  3. react中useState、setState、usemeno、meno区别

    2024-02-22 15:14:01       47 阅读
  4. 路由器配置DMZ主机映射

    2024-02-22 15:14:01       73 阅读
  5. 提升爬虫效率:多线程,多进程,多协程

    2024-02-22 15:14:01       45 阅读
  6. 近红外γ-谷氨酰转肽酶(GGT)荧光探针(NRh-G)星戈瑞

    2024-02-22 15:14:01       51 阅读
  7. 物联网和人工智能的融合

    2024-02-22 15:14:01       60 阅读
  8. android 全局异常处理封装

    2024-02-22 15:14:01       51 阅读
  9. C语言内存模型的深度剖析

    2024-02-22 15:14:01       51 阅读
  10. 自然语言转SQL的应用场景探索

    2024-02-22 15:14:01       50 阅读