知识改变命运! 在MySQL中,根据加锁的维度可以将锁划分为哪些类型呢?_newnew-lskyf博客社区

在MySQL中,根据加锁的维度可以将锁划分为哪些类型呢?

newnew 9月前 ⋅ 1085 阅读 ⋅ 0 个赞

问题:

在MySQL中,根据加锁的维度可以将锁划分为哪些类型呢?

答案:

按读写权限划分:

共享锁(Shared Locks,简称S):在事物要读取一条记录时,需要先获取该记录的S锁,S锁可以在同一时刻 被多个事物同时持有。

排他锁(Exclusive Locks,简称X):在事物要改动一条记录时,需要先获取该记录的X锁。X锁在同一时刻只能被一个事物持有。

意向锁:由数据库自己维护的加锁标识,可以快速的判断表中是否有记录被上锁,避免遍历,提高加锁效率

按加锁粒度划分:

全局锁(Global Locks):对整个数据库实例加锁,影响整个数据库实例的操作。

表锁(Table Locks):对整张表加锁,影响该表的所有操作。

行锁(Row Locks):对表中的某一行或行集合进行锁定,影响该行的所有操作。

行锁分为:

 `记录锁`(Record Lock):锁住一行记录。
 
 `间隙锁`(Gap Lock):锁住一个区间(不包括边界)
 当我们使用条件范围检索数据并请求共享或排他锁时,InnoDB会给条件范围内但不存在的记录加间隙锁,
 如果用相等条件请求一个不存在的记录并加锁时也会触发间隙锁。比如数据库只有1,4两条数据,如果
 查找不存在的3,则会导致(1,4)区间锁定。
 
 `临间锁`(Next-key Lock):记录锁和间隙锁的结合(包括边界)
 当使用唯一索引时,等值匹配到一条记录那么临间锁就会退化为记录锁,没有匹配到任何记录时,
 临间锁就会退化为间隙锁

实现方式划分:

乐观锁(Optimistic Locking):假定多个事务之间不会发生并发冲突,只在数据更新时才加锁。

悲观锁(Pessimistic Locking):假定多个事务之间会发生并发冲突,在数据访问时就会加锁。

按作用对象划分:

乐观表级锁(Optimistic Table Locks):在执行数据更新操作之前,会先检查数据是否被其他客户端修改过。

悲观表级锁(Pessimistic Table Locks):在执行数据更新操作之前,会直接获取排他锁,阻止其他客户端修改数据。

持久性划分:

持久锁(Persistent Locks):会在数据更新时加锁,直到事务结束才释放锁。

乐观锁:只在数据更新时加锁,但会在数据更新前检查其他事务是否修改过数据。

使用场景划分:

行级锁(Row-Level Locks):适用于高并发读写、写操作频繁的场景。

表级锁(Table-Level Locks):适用于读操作较多、并发写较少的场景。

页面锁(Page Locks):适用于读多写少、对数据一致性要求不高的场景。

读锁(Read Locks):适用于大量读取数据的场景。

写锁(Write Locks):适用于对数据一致性要求较高的场景。


全部评论: 0

    我有话说:

    java高频面试题-mysqlInnoDB与MyISAM存储引擎有哪些区别 ?

    mysqlInnoDB与MyISAM存储引擎有哪些区别 ? MySQL是一个广泛使用关系型数据库管理系统,其中InnoDB和MyISAM是两种常用存储引擎。它们功能和性能方面存在着显著差异

    chrome浏览器如何设置默认搜索引擎:谷歌、百、Bing?

    欢迎来到 lskyf.com!本文详细介绍如何手机端Chrome浏览器和Windows 10 PC端(使用Chrome浏览器)设置默认搜索引擎谷歌、百或Bing。通过这些个性化配置,您可以

    java高频面试题-java类载需要经历哪些过程?

    本篇文章是基于JDK 8及以上版本Java类载过程。 Java类载过程 Java类载是Java虚拟机(JVM)执行过程关键步骤。它涉及Java类动态载、链接和初始化。本文,我们

    mybatis 映射属性部分值null另一种特殊情况

    今天遇到一个问题mybatis映射到Java属性部分数据没有值null 表现其他Integer类型都有值,唯独String类型没有值 疑问一个简单映射为什么没有值?平时都是这样干。都没有问题

    opencvidea简单示例

    这篇文章简述是opencvidea简单示例 安装opencv 首先,需要系统上安装opencv。可以opencv官方网站上找到安装指南。 项目添加libary 安装完opencv后

    面试题:MySQL参数innodb_flush_log_at_trx_commit有什么作用?

    面试题:MySQL参数innodb_flush_log_at_trx_commit有什么作用? innodb_flush_log_at_trx_commit是MySQLInnoDB存储引擎一个

    Linux 快捷键教程:如何挂起正编辑文件并后台运行,再次调回前台继续编辑

    Linux 如何编辑文件挂起到后台并后台运行,以便编辑其他文件后返回并继续编辑? Linux ,您可以使用 "Ctrl + Z" 快捷键当前正在运行进程(包括正编辑

    mysql GROUP BY去重报错,可以外面套一层查询

    SELECT * FROM ( SELECT s.id, c.NAME FROM tbl_stu s, tbl_city c WHERE s.id = c.stu ) aa GROUP BY s.id, c.NAME

    java高频面试题-Spring,当一个Bean依赖另一个Bean时,如果这两个Bean之间出现了循环依赖,Spring会如何处理

    Spring 循环依赖处理 循环依赖是指两个或多个Bean之间相互依赖,形成了相互引用关系。Spring框架,如果遇到循环依赖,即两个Bean互相持有对方引用,Spring框架如何处理

    电池寿命优化指南:实用步骤助你释放手机电池超能力

    引言: 曾经有一群拥有非凡能力手机电池,它们可以让你手机连续工作数天。但是,现实世界,我们需要更实用方法来延长电池寿命。本指南你提供详细步骤,帮助你释放手机电池超能力。 步骤 1

    英文版jmeter如何切换简体中文,或切换其他语言,汉化。

    1.前言:如果你jmeter是英文版但是你觉得汉语用起来比较方便那么你可以切换简体中文。 2.临时切换步骤:找到jmeter顶部栏选择 Options--->Choose Languge

    SSD和HDD能否共存于一个系统

    答:可以。 实际上,许多现代计算机系统都同时使用固态硬盘(SSD)和机械硬盘(HDD)。这种配置允许SSD上安装操作系统和常用应用程序,而大容量数据存储HDD上。 SSD和HDD共存带来多重

    避免加班有那些方法

      不想加班,但是又不得不吧,我们怎么才能不加班给个人觉得可以从这几个方面出发 1.找到原因,尽可能快速完成工作 2.提高工作效率提高技能 3.找个不公司  

    淘宝禁止恶意买家下单(不让特定买家店铺购买)

    问题: 开店铺时候总会遇到某些恶意买家,下单付款,马上又退款!反复多次给你造成不必要麻烦。唯一办法就是阻止其店铺再次购买。淘宝有个免房费工具可以你服务之前叫做【客户关系管理】现在已经

    spring boot项目本地没问题,部署到服务器mysql报错:errorCode 0, state 08S01

    错误现象: 开发时候没有报错,能正常运行并且能连接服务器。但是部署到服务器报错。 错误如下: 2023-04-07 11:54:40.617 ERROR 7 --- [reate

    加入公众号
    加入公众号