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

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

newnew 10天前 ⋅ 61 阅读 ⋅ 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

    我有话说:

    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

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

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

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

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

    避免加班有那些方法

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

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

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

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

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

    mysql5.7x升级到mysql8.0.3产生错误

    错误日志 2023:05:03 01:10:36.305 ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper ? - Table 'db_mblog.TBL_USER_EXTEND' do...

    SpringBoot系列21-实现策略模式

    如何spring boot 使用@component 实现策略模式 1. Spring Boot 实现策略模式可以使用 @Component 注解来策略类标记 Spring 组件,并

    写作真正带给我是什么?

    坚持自己爱好,并且一直做出努力,这会成为你以后生活底气。 写作到底给我带来了什么? 1,让我有了成就感 以前我觉得自己不懂得说话艺术,就是口才不好,但是我有一个习惯就是很多事情都

    kubeshere创建mysql发生FailedCreate requested: requests.cpu=500m,requests.memory=2000Mi, used: requests

    1.错误日志 create Pod mysql-master-v1-0 in StatefulSet mysql-master-v1 failed error: pods "mysql-master

    mysql循环cursor游标模板

    此模板避免了,cursor循环遍历时候出现最后一次重复 CREATE DEFINER=`root`@`%` PROCEDURE `proce_test`() BEGIN DECLARE v_col

    加入公众号
    加入公众号