首页 > 数据库 >mysql 行锁,间隙锁,临键锁

mysql 行锁,间隙锁,临键锁

时间:2023-10-11 09:12:34浏览次数:63  
标签:间隙 行锁 临键 索引 mysql 锁定

mysql中的行锁,临键锁,间隙锁都是为了解决innodb引擎下事务隔离级别的一系列排他锁

行锁: 也称为记录锁,当我们对mysql表中的某一条记录,或者唯一索引加锁的时候,innodb会默认对这一行记录进行加锁,避免其他事务对其进行修改

间隙所:顾名思义,就是锁定一个索引的区间,在普通索引或者唯一索引列上,由于索引是基于b+树的一个结构存储,默认会存储在一个索引的一个区间,就是事务对索引列进行加锁的时候,默认锁定索引左右开区间的一个范围,在进行索引的范围查询中,无论是否是唯一索引,都会触发一个间隙锁,比如基于beewttn范围查询过程中,就会产生一个左右开区间的间隙锁。

临键锁:相当于行锁+间隙锁的一个组合,他的锁定范围既包含的索引记录,也包含了索引区间,会锁定一个左开右闭的一个区间范围

 

三种锁表示的来说,就是锁定数据的一个范围,是为了解决幻读的这个一个问题,而临键锁,打我们使用一个非唯一索引的时候,他不仅会锁定这行记录还会锁定这个记录对应的左开右闭区间,因此在实际

使用过程中,尽量使用唯一索引或者主键索引,避免造成大面积的锁定造成性能的一个影响

标签:间隙,行锁,临键,索引,mysql,锁定
From: https://www.cnblogs.com/bkhdd/p/16580922.html

相关文章

  • 2023_10_10_MYSQL_DAY_02_笔记
    2023_10_10_MYSQL_DAY_02_笔记#在FROM子句中使用子查询SELECTa.ename,a.sal,a.deptno,b.salavgFROMempa,(SELECTdeptno,AVG(sal)salavgFROMempGROUPBYdeptno)bWHEREa.deptno=b.deptnoANDa.sal>b.s......
  • 2023_10_10_MYSQL_DAY_02_课后题
    2023_10_10_MYSQL_DAY_02_课后题#06章1--7题#1.查询10号部门所有员工的员工姓名,员工工资,工资级别。SELECTe.ename员工姓名,e.`sal`员工工资,s.`grade`工资级别FROMempe,salgradesWHEREe.`deptno`=10ANDe.`sal`BETWEENs.`losal`ANDs.`hisal`;#2.查询2......
  • MySQL5.7 windows安装
    安装Mysql前:​ 1、如果:你(曾经安装过),需要(先卸载干净),否则是(装不上)的。所以先谈(卸载)​2、如果:你没有(安装过),这是(第一次安装),请直接看(第2部分)Mysql安装教程。1、Mysql彻底卸载分为三个步骤: 1、卸载Mysql(软件) 2、删除Mysql(残留文件) 3、删除mysql(注册表) 4、重启电......
  • mysql 索引(待补充)
    一、索引1、什么是索引在关系数据库中,索引是一种数据结构,他将数据提前按照一定的规则进行排序和组织,能够帮助快速定位到数据记录的数据,加快数据库表中数据的查找和访问速度。像书籍的目录、文件夹、标签、房号....都可以帮助我们快速定位,都可以视为索引。能实现快速定......
  • docker入门加实战—从部署MySQL入门docker
    docker入门加实战—从部署MySQL入门dockerdocker部署MySQL输入如下命令:dockerrun-d\--namemysql\-p3306:3306\-eTZ=Asia/Shanghai\-eMYSQL_ROOT_PASSWORD=123\mysql部署成功截图如下:当执行命令后,Docker做的第一件事情,是去自动搜索并下载了MySQL,......
  • MySql事务以及隔离级别
    MySql事务什么是事务?即为一段代码块在执行过程中同时结束并不报错,要么同时成功,要么同时失败为什么需要事务?为了考虑数据的安全性,比如转账时,付款和收款要同时成功事务怎么使用?--声明事务starttransaction;sql1,sql2,.....commit;--提交事务--如果上述代......
  • MySQL基础命令
    一)基础命令1)对数据库的操作1.使用use库名;2.创建createdatabase库名;3.删除dropdatabase库名;4.显示数据库,表showdatabases;showtables;2)对数据表的操作1.创建表createtable表名(字段字段类型,idint,namevarchar(32));2.删除表droptable表名;3.修改表名altertable......
  • MySQL业务用户无法修改的会话级别参数
    对于MySQL的系统参数,有些参数只能在全局级别(global)修改,有些参数能在全局和会话(session)级别修改。对于能在会话级别修改的参数,应用用户也可以在当前会话中修改需要的参数来实现不同的业务需求。比如sql_mode参数,如果不同的应用可以根据不同的需求在各自的session中进行修改。此外,......
  • MySQL 低版本 解决row_number()over()无法使用的方法
    MySQL8以上版本支持了很多的窗口函数,但是低版本的可能也需要用到row_number()over()selecta.u_name,a.class,a.score,if((@class=null)or(@class=a.class),@rownum:=@rownum+1,@rownum:=1)rn,#没有并列情况if((@class=......
  • MySQL存储过程、递归调用
    MySQL存储过程、递归调用实现字典数据的预处理,维护类别表、数据表、tree表,数据库在jwzh_manager库1、先将excel导入到system_dict表,按表字段注释对应匹配。2、编写存储过程处理数据CREATEDEFINER=`root`@`%`PROCEDURE`handle_system_dict`()BEGIN #Routinebodygoesher......