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

12.24-12.28Mysql锁阅读笔记

1.Mysql的锁有哪些种类

  1. 全局锁,
    通过flush tables with read lock
    应用场景是全局备份,备份的时候如果有两个表,备份
    先备份了用户表,然后用户了商品,再备份商品表
    那么商品表库存减少了,然而用户表的育儿没有减少
    但是再可重复读的事务隔离级别可以用mVCC快照机制解决
  2. 表级锁
  • 表锁
    当一个事务锁上表锁之后,它就只能访问自己锁上这个锁的表

  • 元数据锁
    就是锁上表的元数据,出现一个问题就是,当出现长事务的时候,这个时候,他先select了,这个时候获取的是元数据的读锁,然后当另一个事务修改这个元数据的时候,那么就会获得元数据写锁,但是还未获取,会阻塞,申请元数据锁的事务会形成一个队列,所以后续申请元数据读锁(也就是一个select语句都会阻塞)

  • 意向锁
    意向锁是一个表锁,用作于这个快速检查表中是否有这个行级别锁,也就是说,当我进行加入共享锁或者是独占锁的时候对行,我就会对表加入一个意向独占锁,或者是意向共享锁,这样在后续增加表锁的时候就会冲突,不需要遍历所有的表,就可以进行找到数据库的锁情况。然后意向锁和意向锁之间是不会冲突的,所以行级锁还是按照之前的规矩增加

  • auto_inc锁
    用于这个自增数据加锁,目的就是为了确保自增锁的id唯一,不存在这个并发问题。一般来说inc锁是事务级别的,也就是事务提交之后才会对自增锁释放,
    auto_inc锁不是事务级别的而是语句级别的,当插入语句结束之后就释放锁,然后在新的版本中auto_inc锁更加轻量化了,变成了只要对字段赋值之后就会释放锁
    问题:对于insert selcect语句来说,如果加入的是轻量级的说,那么并发事务的事务就会出现问题,然后备份binlog的时候会只会备份语句,在进行同步的时候,会顺序执行,这样就会出现主从数据不一致的情况,所以我们这种情况可以设置binlog的format格式就是row的形式

  1. 行级锁
  • record记录锁
    通过select * form table where xxx for update
    然后之后就是分为共享锁和独占锁,共享锁和共享锁可以共存,但是共享锁和独占锁不能够并存,独占锁和独占锁也不能共存
  • gap锁
    gap可以用来避免幻读,gap锁可以共存
  • next-key锁
    就是一个gap锁加上一个记录锁
  • 插入意向锁
    当某个事务要对某个点插入的时候,就会出现一个什么情况呢
    如果这个时候有gap锁的时候,就会生成插入意向锁进行等待,然后另外同样插入的时候增加到一个插入意向锁,然而因为唯一性约束,第二个插入就不会成功

Mysql锁的具体锁插入过程

  1. 哪些sql语句会加锁
    updata语句和 delete语句会加上X锁,以及select 方法for update会加X锁
  2. 什么时候mysql会加入锁
    首先是select * xxx for update的时候,不是mysql的快照读而是当前读,这个时候会加锁进行读取
    加锁的全部的单位都是next_key锁,然后这个锁的目的主要是防止幻读的,所以当有些时候,不需要加锁也可以避免幻读的话,那么这个锁会退化
    首先是分类
    唯一索引等值查询,查到了,只会加一个记录锁;没查到,那么就加间隙锁

唯一索引范围查询,
小于, 就加上间隙锁加上之前左右的,记录锁以及间隙锁
小于等于,如果查到了,就加上这个值得记录锁,没查到就仍然是这个间隙锁
大于,就是间隙锁加上右边所有的记录锁和间隙锁
大于等于就是查到了就加上这个得记录锁,没查到就是只有当前间隙锁和后面所有间隙锁和记录锁

非唯一索引等值查询
首先是查到了,就会锁当前主键记录说,同时,会根据锁住前后的间隙锁,这个时候就看前后有没有间隙锁来决定能不能插入与该值相等的
然后是没查到,就会加一个间隙锁

非唯一索引范围查询
小于, 就会加上间隙锁,以及左边所有的记录锁以及间隙锁
小于等于,如果查到会加上该值的记录锁,该值后面的间隙锁,以及该值前面所有的记录锁以及间隙锁 如果没有等于的值,也是加上间隙锁以及左边所有数据的记录锁以及间隙锁
大于 就会加上间隙锁,以及右边所有记录的记录锁以及间隙锁
大于等于,也是查到了就记录锁,该记录左边一个间隙锁,当前记录锁,以及后面所有的记录锁以及间隙锁
没查到就是一个间隙锁,以及后面所有的间隙锁以及记录锁

没有索引的情况
就是会扫描全表,对全表锁起来,所以进行update操作的时候一定要加上索引,要不然一个update就会把所有的数据加上锁

  1. 什么时候会造成死锁
    比如第一个select 等值查询 某一个值
    然后他没查到就会将间隙锁锁起来

然后同时第二个selcect也查同样差不多范围的值的时候,也会有一个间隙锁

当第一个事务第二条语句是要插入到该间隙里面的时候,

相关文章:

12.24-12.28Mysql锁阅读笔记

1.Mysql的锁有哪些种类 全局锁, 通过flush tables with read lock 应用场景是全局备份,备份的时候如果有两个表,备份 先备份了用户表,然后用户了商品,再备份商品表 那么商品表库存减少了,然而用户表的育儿…...

支持最新 mysql9的workbench8.0.39 中文汉化教程来了

之前在 B 站上发布了 mysql8 workbench 汉化教程,一年多来帮助很多初学者解决了不熟悉英文的烦恼。 汉化视频可以访问: 2024最新版mysql8.0.39中文版mysql workbench汉化 中文升级 旧版汉化报错解决_哔哩哔哩_bilibili MySql Workbench汉化_哔哩哔哩_…...

golang连接jenkins构建build

1.安装jenkins依赖 go get github.com/bndr/gojenkins2.代码 import ("context""file/utils/logs""github.com/bndr/gojenkins""github.com/gin-gonic/gin""net/http""time" )// 接收单个静态文件上线参数 type…...

SCAU高程进阶题(自用)

18711 字符串去重 Description 一个完全由小写字母组成的长度为n的字符串&#xff0c;现在要求你去除所有重复的字母&#xff0c;并将剩下的字母按从小到大的次序输出。 如输入baaadccaab&#xff0c;输出abcd。 输入格式 第一行一个整数n&#xff0c;表示字符串长度(0<n&…...

基于STM32F103控制L298N驱动两相四线步进电机

文章目录 前言一、模块参数二、接口说明三、准备工作四、直流电机驱动引脚接线效果展示 五、两相四线步进电机驱动步进电机相关概念拍数驱动时序引脚接线效果展示 六、参考示例 前言 L298N 是一种常见的双 H 桥电机驱动模块&#xff0c;广泛用于驱动直流电机和步进电机。它基于…...

libreoffice在Windows和Linux环境的安装和结合Springboot使用教程

前言&#xff1a; 在公司做开发时&#xff0c;遇到一个需求&#xff0c;要求上传的文件有图片&#xff0c;也有word和pdf。预览信息时&#xff0c;既要求能水印展示出来&#xff0c;又要求能大图水印预览。思索许久&#xff0c;我决定采取全部打水印然后转成图片Base64&#x…...

前端开发 -- 自动回复机器人【附完整源码】

一&#xff1a;效果展示 本项目实现了一个简单的网页聊天界面&#xff0c;用户可以在输入框中输入消息&#xff0c;并点击发送按钮或按下回车键来发送消息。机器人会根据用户发送的消息内容&#xff0c;通过关键字匹配来生成自动回复。 二&#xff1a;源代码分享 <!DOCTYP…...

vue+echarts实现疫情折线图

效果&#xff1a; 代码&#xff1a; <<template><div><div id"left1" style "height:800px;width:100%"></div></div> </template><script> //疫情数据//export default {data() {return {data:{//疫情数据…...

服务器nfs文件共享

1. 配置 NFS 服务器(NFS Server) 在 Ubuntu/Debian 上: sudo apt update sudo apt install nfs-kernel-server在 CentOS/RHEL 上: sudo yum install nfs-utils1.2 创建共享目录 选择一个要共享的目录,并确保该目录的权限正确设置。例如,假设我们要共享 /srv/nfs 目录…...

基于Vue+SSM+SpringCloudAlibaba的科目课程管理系统

功能1&#xff1a;科目列表 功能2&#xff1a;条件查询 功能3&#xff1a;分页查询 功能4&#xff1a;excel批量导入 功能5&#xff1a;修改 功能6&#xff1a;删除...

vue3配置caddy作为静态服务器,在浏览器地址栏刷新出现404

vue3配置caddy作为静态服务器&#xff0c;在浏览器地址栏刷新出现404 1 情况描述2 原因3 配置 1 情况描述 在vue打包之后&#xff0c;形成dist文件&#xff0c;采用caddy作为静态资源服务器。在浏览器中输入域名时可以访问网站&#xff0c;但是&#xff0c;进过路由导航栏内部…...

深入理解委托:C# 编程中的强大工具

在面向对象编程中&#xff0c;委托&#xff08;Delegate&#xff09; 是一个非常强大且灵活的概念&#xff0c;特别是在 C# 编程语言中。它不仅仅是函数指针的替代品&#xff0c;还提供了更高层次的抽象&#xff0c;使得代码更加简洁、灵活和可维护。在这篇博客中&#xff0c;我…...

【Java 数据结构】合并两个有序链表

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 题目 2. 解析 3. 代码实现 4. 小结 1. 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示…...

基于微信小程序的校园访客登记系统

基于微信小程序的校园访客登记系统 功能列表 用户端功能 注册与登录 &#xff1a;支持用户通过手机号短信验证码注册和登录。个人资料管理 &#xff1a;允许用户编辑和更新个人信息及其密码。站内信消息通知&#xff1a;通知公告。来访预约&#xff1a;提交来访预约支持车牌…...

uniapp 判断多选、选中取消选中的逻辑处理

一、效果展示 二、代码 1.父组件: :id=“this.id” : 给子组件传递参数【id】 @callParentMethod=“takeIndexFun” :给子组件传递方法,这样可以在子组件直接调用父组件的方法 <view @click="$refs.member.open()"...

php8.0版本更新了哪些内容

PHP 8.0版本是PHP语言的一个重要更新&#xff0c;它引入了许多新特性和改进&#xff0c;旨在提高性能、增强代码的可读性和可维护性。以下是PHP 8.0版本更新的主要内容&#xff1a; 一、性能提升 JIT编译器&#xff1a;PHP 8.0引入了Just-In-Time&#xff08;JIT&#xff09;…...

Browser Use:AI智能体自动化操作浏览器的开源工具

Browser Use:AI智能体自动化操作浏览器的开源工具 Browser Use 简介1. 安装所需依赖2. 生成openai密钥3. 编写代码4. 运行代码5. 部署与优化5.1 部署AI代理5.2 优化与扩展总结Browser Use 简介 browser-use是一个Python库,它能够帮助我们将AI代理与浏览器自动化操作结合起来;…...

Android笔记(四十):ViewPager2嵌套RecyclerView滑动冲突进一步解决

背景 ViewPager2内嵌套横向滑动的RecyclerView&#xff0c;会有滑动冲突的情况&#xff0c;引入官方提供的NestedScrollableHost类可以解决冲突问题&#xff0c;但是有一些瑕疵&#xff0c;滑动横向RecyclerView到顶部&#xff0c;按住它不放手继续往左拖再往右拖&#xff0c;这…...

POS系统即销售点系统 文档与数据库设计

POS系统即销售点系统&#xff0c;是一种用于商业交易的软硬件集成系统&#xff0c;主要用于管理销售、库存、客户信息等&#xff0c;以下是其详细介绍&#xff1a; 1. 系统组成 硬件部分 &#xff1a; 收银终端&#xff1a;包括传统的台式收银机、平板电脑、智能手机等设备&a…...

安全合规遇 AI 强援:深度驱动行业发展新引擎 | 倍孜网络CEO聂子尧出席ICT深度观察报告会!

12月24日&#xff0c;2025中国信通院深度观察报告会科技伦理与合规发展分论坛在北京举办。本次分论坛主题为“伦理先行&#xff0c;合规致远”&#xff0c;聚焦互联网广告合规治理、移动终端应用生态治理、短视频平台责任限度等前沿话题进行分享与探讨。工业和信息化部领导&…...

算法进阶:贪心算法

贪心算法是一种简单而直观的算法思想&#xff0c;它在每一步选择中都采取在当前状态下最优的选择&#xff0c;以期望最终得到全局最优解。贪心算法通常适用于一些具有最优子结构的问题&#xff0c;即问题的最优解可以通过一系列局部最优解的选择得到。 贪心算法的基本思路是&a…...

C++ 设计模式:工厂方法(Factory Method)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 抽象工厂 链接&#xff1a;C 设计模式 - 原型模式 链接&#xff1a;C 设计模式 - 建造者模式 工厂方法&#xff08;Factory Method&#xff09;是创建型设计模式之一&#xff0c;它提供了一种创建对象的接口&#xf…...

手机联系人 查询 添加操作

Android——添加联系人_android 添加联系人-CSDN博客 上面连接添加联系人已测试 是可以 Android : 获取、添加、手机联系人-ContentResolver简单应用_contentresolver 添加联系人-CSDN博客...

【LeetCode】2506、统计相似字符串对的数目

【LeetCode】2506、统计相似字符串对的数目 文章目录 一、哈希表位运算1.1 哈希表位运算 二、多语言解法 一、哈希表位运算 1.1 哈希表位运算 每个字符串, 可用一个 int 表示. (每个字符 是 int 的一个位) 哈希表记录各 字符组合 出现的次数 步骤: 遇到一个字符串, 得到 ma…...

金仓数据库对象访问权限的管理

基础知识 对象的分类 数据库的表、索引、视图、缺省值、规则、触发器等等&#xff0c;都称为数据库对象&#xff0c;对象分为如下两类: 模式(SCHEMA)对象:可以理解为一个存储目录&#xff0c;包含视图、索引、数据类型、函数和操作符等。非模式对象:其他的数据库对象&#x…...

Qt 中实现系统主题感知

【写在前面】 在现代桌面应用程序开发中&#xff0c;系统主题感知是一项重要的功能&#xff0c;它使得应用程序能够根据用户的系统主题设置&#xff08;如深色模式或浅色模式&#xff09;自动调整其外观。 Qt 作为一个跨平台的C图形用户界面应用程序开发框架&#xff0c;提供…...

Modbus TCP 报文说明

Modbus TCP 报文说明 Modbus TCP 报文结构报文解析功能码说明Modbus 功能码与 PLC 地址的对应关系 Modbus TCP 报文结构 事务标识符&#xff08;Transaction Identifier&#xff0c;2 字节&#xff09;&#xff1a; 用于匹配请求和响应&#xff0c;通常由客户端生成&#xff0…...

音视频入门基础:MPEG2-TS专题(24)——FFmpeg源码中,显示TS流每个packet的pts、dts的实现

音视频入门基础&#xff1a;MPEG2-TS专题系列文章&#xff1a; 音视频入门基础&#xff1a;MPEG2-TS专题&#xff08;1&#xff09;——MPEG2-TS官方文档下载 音视频入门基础&#xff1a;MPEG2-TS专题&#xff08;2&#xff09;——使用FFmpeg命令生成ts文件 音视频入门基础…...

大模型:OneFitsAll、Time - LLM、LLaTA

LLM数据集:ETT、Illness、Weather ETT、Illness、Weather在上述提到的论文中都是用于时间序列预测研究的真实世界数据集,以下是对它们的具体介绍: ETT数据集 内容:ETT是电力变压器温度(Electric Transformer Temperature)数据集,通常包含电力变压器在不同时间点的温度…...

连锁餐饮行业数据可视化分析方案

引言 随着连锁餐饮行业的迅速发展&#xff0c;市场竞争日益激烈。企业需要更加精准地把握运营状况、消费者需求和市场趋势&#xff0c;以制定科学合理的决策&#xff0c;提升竞争力和盈利能力。可视化数据分析可以帮助连锁餐饮企业整合多源数据&#xff0c;通过直观、动态的可…...