首页 > 数据库 >MySQL的意向锁

MySQL的意向锁

时间:2024-07-15 21:52:35浏览次数:20  
标签:事务 获取 T2 数据表 意向锁 MySQL 共享

InnoDB 支持多粒度锁,它允许行级锁与表级锁共存,而意向锁就是其中的一种表锁

1、意向锁的存在是为了协调行锁和表锁的关系,支持多粒度的锁并存

2、意向锁是一种不与行锁冲突表级锁,这一点非常重要

3、表明某个事务正在某些行持有锁或该事务准备去持有锁


意向锁通常有两种类型:
  • 意向锁共享锁(IS):表示事务打算在表中的各个行上设置共享锁(S锁)

  • 意向锁排他锁(IX):表示事务打算对表中的各个行设置排他锁(X锁)


意向锁是InnoDB自动加上的,加锁时遵从下面两个协议:
  • 事务在获取表中行的共享锁之前,必须先获取表上的IS锁或更强的锁

  • 事务在获取表中行的排他锁之前,必须先获取表上的IX锁


即:意向锁是由存储引擎自己维护的,用户无法手动操作意向锁,在为数据行加共享 / 排他锁之前,InnoDB会先获取该数据行所做数据表的对应意向锁


1、意向锁要解决的问题

现在有两个事务,分别是T1 和 T2,其中 T2试图在该表级别上加共享或排它锁,如果没有意向锁存在,那么T2就需要去检查各个页或行是否存在锁,如果存在意向锁,那么此时T2就会受到由T1控制的表级别意向锁而导致阻塞。T2在锁定该表前不必检查各个页或行锁,而只需检查表上的意向锁。简单说就是给更大一级别的空间示意里面是否已经上过锁。

在数据表的场景中,如果我们某一行数据加上了排它锁,数据库会自动给更大一级的空间,比如数据页或数据表加上意向锁,告诉其他人这个数据页或数据表已经有人上过排它锁了,这条当其他人想要获取数据表排它锁的时候,只需要了解是否有人已经获取这个数据表的意向锁排它所即可。

  • 如果事务想要获得数据表中某些记录的共享锁,就需要在数据表上添加意向共享锁

  • 如果事务想要获得数据表中某些记录的排它锁,就需要在数据表上添加意向排它锁


为了更好的说明意向共享锁,可以参照下面的顺序执行流和实例图:

标签:事务,获取,T2,数据表,意向锁,MySQL,共享
From: https://www.cnblogs.com/jock766/p/18304058

相关文章

  • MySql 创建完表后,进行主键自增的设置、文件上传之后,保存到数据库里(拿到文件名,文件大小
    20240715一、MySql创建完表后,进行主键自增的设置二、文件上传之后,保存到数据库里(拿到文件名,文件大小等文件信息)三、redis缓存更新的模式四、mybatisPlus一、MySql创建完表后,进行主键自增的设置第一种方式:altertable表名changeididintauto_increment;......
  • MySQL增量备份
    增备1做增量备份前,是需要进行一次完成备份的1、做数据修改创建一个add1.t1t1包含:id,name加2条数据id|name|+----+------+|1|add1||2|add2|+----+------+操作如下:MySQLroot@(none):(none)>showdatabases;+--------------------+|Database......
  • MySQL差异备份
    只需准备第一次和最后一次即可1、清理之前的备份内容rm-rf/data/backup/*2、进行完整备份#mkdir-p/data/backup/#xtrabackup--defaults-file=/etc/my.cnf--backup--target-dir=/data/backup/base/-uroot-pLixinyi@123-Hlocalhost-P3306--no-ser......
  • MySQL时间戳转成日期格式
    将时间戳转换为日期格式:--如果时间戳为毫秒级长度为13位,需要先除以1000SELECTid,`task_name`,FROM_UNIXTIME(`task_register_begin_time`/1000,'%Y-%m-%d%H:%i:%s')astask_register_begin_time,FROM_UNIXTIME(`task_register_end_time`/1000,'%Y-%m-%d%H:%i:%s')ast......
  • 基于Java+ Java Swing Mysql 实现的学生宿舍管理系统设计与实现
    一、前言介绍:1.1项目摘要随着高校招生规模的不断扩大,学生宿舍管理面临着越来越多的挑战。传统的学生宿舍管理方式往往依赖于人工记录、纸质档案和口头通知,这种方式不仅效率低下,而且容易出错,给宿舍管理带来了诸多不便。因此,开发一套高效、便捷、准确的学生宿舍管理系统成......
  • 基于Java+Ssm+Mysql实现的Java Web酒店管理项目系统设计与实现
    一、前言介绍:1.1项目摘要随着信息技术的快速发展和互联网的普及,传统酒店行业面临着转型升级的压力。为了提高酒店的经营管理水平,提升客户体验,酒店管理系统应运而生。酒店管理系统通过整合酒店内部资源,实现信息的快速传递和处理,为酒店提供了高效、便捷的管理手段。课题“......
  • Day1_1--通过jdbc驱动程序连接mysql数据库+测试(hamcrest+junit)
    idea项目导入mysql对应版本jar包驱动File->ProjectStructure->Libraries点击加号添加驱动并Apply参考代码importorg.junit.Test;importjava.sql.*;/***@authornanzhi*@date2024/7/159:52*/publicclassk1_jdbc{publicstaticvoidmain(String[]ar......
  • 14 mysql 函数
    在mysql中,函数主要分为内置函数(系统函数)和自定义函数不管是内置函数还是自定义函数,都是使用select函数名(参数列表);字符串函数char_length():判断字符串的字符数length():判断字符串的字节数(字符集有关)SELECTchar_length('你好,中国'),length('你好,中国');--返回结果:51......
  • MySQL PXC集群多个节点同时大量并发update同一行
    如本文标题,MySQLPXC集群多个节点同时大量并发update同一行数据,会怎样?为此,本人做了一个测试,来验证到底会怎样!一、生成测试数据mysql>CREATETABLEtest(->`a`int(11)NOTNULLDEFAULT0,->`b`int(11)DEFAULTNULL,->`c`int(11)DEFAULTNULL,......
  • 为什么MySQL会选择B+树作为索引
    为什么MySQL会选择B+树作为索引在数据库管理系统中,索引是提升查询效率的关键技术之一。MySQL作为广泛使用的关系型数据库管理系统,其核心存储引擎InnoDB选择B+树作为其索引结构,这一选择背后蕴含了深刻的性能和存储效率考量。本文将简要介绍B+树的基本概念,阐述MySQL选择B+树......