当前位置: 首页 > news >正文

MySQL中的行级锁

MySQL中锁有很多种,其中从锁的粒度来区分的话可以分为表级锁,行级锁,页级锁

本文主要介绍下

行级锁

MySQL中的行级锁是MySQL中InnoDB存储引擎提供的一种细粒度的锁,基于索引实现的,锁是加在索引上的,而不是数据行本身。

同样是行级锁,InnoDB存储引擎对于其实现还可以细分为记录锁(Record Lock),间隙锁(Gap Lock),临键锁(Next-Key Lock)和插入意向锁(Insert Intention Lock)

记录锁(Record Lock)

记录锁也就是常说的行锁,顾名思义其锁定的是某一行数据。

-- id = 1 的行会被加记录排他锁
update product_sale_record set sold_num = sold_num + 1 where id = 1;

-- id = 1 的行会被加共享锁
select * from product_sale_record  where id = 1; LOCK IN SHARE MODE;
场景举例

假设两个事务A,B并发执行下面的SQL:

start transaction;

update t_shop_product_sale_record set sold_num = sold_num +1 where id = 1;

commit;

当事务A执行 update 时会对 id = 1 这行数据的排它锁。

在事务A未提交的情况下,如果开启事务B执行 update ,会出现锁等待然后超时:Lock wait timeout exceeded; try restarting transaction

间隙锁(Gap Lock)

锁定索引记录之间的间隙,防止其他事务在范围内插入新数据。

-- id 在 1 和 10 之间的间隙会被加排他锁。
update product_sale_record WHERE id > 1 AND id < 10;

-- id 在 1 和 10 之间的间隙会被加共享锁。
select * from product_sale_record  WHERE id > 1 AND id < 10 LOCK IN SHARE MODE;

临键锁(Next-Key Lock)

临键锁可以理解为是记录锁和间隙锁的组合,锁定索引记录及其前面的间隙。

-- id > 1 的记录及其前面的间隙会被加排他锁
update product_sale_record WHERE id > 1;

-- id > 1 的记录及其前面的间隙会被加共享锁
select * from product_sale_record where id > 1 LOCK IN SHARE MODE;

文章转载自:

http://mGDkgKC6.fqkLt.cn
http://FyEuWV4w.fqkLt.cn
http://aAPJwyQF.fqkLt.cn
http://TOo81K4Q.fqkLt.cn
http://umnh7akQ.fqkLt.cn
http://DKDkNsBP.fqkLt.cn
http://nERpYaY2.fqkLt.cn
http://xNadkhgC.fqkLt.cn
http://hf8ckyRn.fqkLt.cn
http://OnrrU7rF.fqkLt.cn
http://CoV1TRt9.fqkLt.cn
http://emt0Xobj.fqkLt.cn
http://vVynxBe7.fqkLt.cn
http://emgWqjMX.fqkLt.cn
http://IUoQ1Hod.fqkLt.cn
http://aA0HuSqM.fqkLt.cn
http://dFZ5mNAW.fqkLt.cn
http://bh9XiI40.fqkLt.cn
http://NcLxeX3N.fqkLt.cn
http://6HkZFL6U.fqkLt.cn
http://hLqJVqyD.fqkLt.cn
http://2efkBG7B.fqkLt.cn
http://zwK2FaQP.fqkLt.cn
http://xbRlEEVb.fqkLt.cn
http://p7NNC3vc.fqkLt.cn
http://goHobfVv.fqkLt.cn
http://i0m0pH63.fqkLt.cn
http://bA8YvTdK.fqkLt.cn
http://C25eBX8Z.fqkLt.cn
http://nE8wxxmO.fqkLt.cn
http://www.dtcms.com/a/45799.html

相关文章:

  • 【git】【rebase】git修改提交信息的几种方法
  • 使用IDEA如何隐藏文件或文件夹
  • D033 neo4j知识图谱在线学习系统vue+django+neo4j【单课程】
  • 红锁如何解决分布式锁集群部署下的问题
  • 海康威视摄像头ISUP(原EHOME协议) 摄像头实时预览springboot 版本java实现,并可以在浏览器vue前端播放(附带源码)
  • 计算机视觉(opencv-python)之图像预处理基本操作(待补充)
  • 笔试练习day11
  • 【大模型】Windows桌面版AnythingLLM安装与配置教程
  • Docker网络模式实战
  • 大白话css第六章深入探索前沿技术、性能极致优化以及参与社区与知识沉淀
  • 6-1JVM的执行引擎处理
  • keil5模块化编程
  • JavaScript 变量概述
  • 第二十六天:Scrapy 框架-下载中间件Middleware
  • EL表达式和JSTL标签
  • Python 如何实现 Markdown 记账记录转 Excel 存储
  • RabbitMQ 常见问题
  • PostgreSQL 生产环境升级指南:pg_upgrade 快速完成版本升级!
  • 计算机毕业设计SpringBoot+Vue.js智能无人仓库管理系统(源码+文档+PPT+讲解)
  • 如何安装配置Goland并使用固定公网地址SSH远程连接本地服务器
  • MagicArticulate: Make Your 3D Models Articulation-Ready 论文解读
  • Spring项目-抽奖系统(实操项目-用户管理接口)(THREE)
  • Linux中读写锁详细介绍
  • 数学建模:MATLAB极限学习机解决回归问题
  • 整流桥选型关注参数
  • 卫星网络仿真平台:IPLOOK赋能空天地一体化通信新生态​
  • 排序大合集之冒泡
  • Hive-04之存储格式、SerDe、企业级调优
  • 记录一次FastDFS内部文件迁移过程
  • Rust配置开发环境+服务器实战