MySQL - 掌握MySQL锁的必备知识

1. 多个事务更新同一行数据时是如何加锁避免脏写?

当有多个事务同时并发更新一行数据的时候,不就是会有脏写的问题吗?那么脏写是靠什么防止的呢?

其实就是靠锁机制,依靠锁机制让多个事务更新一行数据的时候串行化,避免同时更新一行数据。

在MySQL里,假设有一行数据摆在那儿不动,此时有一个事务来了要更新这行数据,这个时候他会先琢磨一下,看看这行数据此时有没有人加锁,一看没人加锁,说明他是第一个人,此时这个事务就会创建一个锁,里面包含了自己的trx_id和等待状态,然后把锁跟这行数据关联在一起。

同时更新一行数据必须把他所在的数据页从磁盘文件里读取到缓存页里才能更新的,所以说此时这行数据和关联的锁数据结构都是在内存里的,如下图:
在这里插入图片描述
上图中,因为事务A给那行数据加了锁,所以此时就可以说那行数据已经被加锁了。

既然被加锁了,此时就不能再让别人访问了,现在有另外一个事务B过来了,这个事务B也想更新那行数据,此时就会检查一下,当前这行数据有没有别人加锁,这时就会发现事务A已经给这行数据加锁了,这怎么办呢?

事务B也会生成一个锁数据结构,里面有他的trx_id,还有自己的等待状态,但是他因为是在排队等待,所以他的等待状态就是true了,意思是我在等着呢,如下图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/806712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于JAVA的校园失物招领平台

采用技术 基于JAVA的校园失物招领平台的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员功能 论坛管理 失物认领管理 寻物启事管理 用户管理 失物…

neo4j-01

Neo4j是: 开源的(社区版开源免费)无模式(不用预设数据的格式,数据更加灵活)noSQL(非关系型数据库,数据更易拓展)图数据库(使用图这种数据结构作为数据存储方…

基于java的某超市进销存管理系统

开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclip…

lovesql 手工sql注入

1.页面 2.万能密码登录成功 我还傻乎乎的以为密码就是flag 但不是 3. 继续注入 判断列数 确定了只有三列 开始尝试联合注入 4.使用联合注入之前先判断显示位 5.之后一步一步的构造,先得到当前数据库名 利用database() 再得到库里有哪些表 …

前端保留两位小数

一、保留两位小数(四舍五入) 解决方案:使用 toFixed(x) 方法可以对小数进行指定位数保留,其中x是要保留的位数用法:num.toFixed(x),其中num为需要操作的数据,x为要保留的位数示例:1…

20240410解决OK3588-C的核心板刷机之后无法启动的问题

20240410解决OK3588-C的核心板刷机之后无法启动的问题 2024/4/10 19:38 1、编译OK3588的LINUX/Buildroot?forlinxubuntu: ~/3588/OK3588_Linux_fs$ sudo ./build.sh BoardConfig-linuxfs-ok3588.mk 2、进行全编译 forlinxubuntu: ~/3588/OK3588_Linux_fs$ sudo ./bu…

互联网轻量级框架整合之MyBatis核心组件

在看本篇内容之前,最好先理解一下Hibernate和MyBatis的本质区别,这篇Hibernate和MyBatis使用对比实例做了实际的代码级对比,而MyBatis作为更适合互联网产品的持久层首选必定有必然的原因 MyBatis核心组件 MyBatis能够成为数据持久层首选框&a…

每日一题(leetcode1702):修改后的最大二进制字符串--思维

找到第一个0之后,对于后面的子串(包括那个0),所有的0都能调上来,然后一一转化为10,因此从找到的第一个0的位置开始,接下来是(后半部分子串0的个数-1)个1,然后…

电力系统卫星授时信号安全隔离装置防护方案

电力系统是国家关键基础设施, 电力安全关系国计民生, 是国家安全的重要保障, 与政治安全、经济安全、 网络安全、社会安全等诸多领域密切关联。电网运行情况瞬息万变,为了在其发生事故时能够及时得到处理,需要统一的时…

vue2 二次封装element 组件,继承组件原属性,事件,插槽 示例

测试页面代码 这里主要记录如何封装element的el-input 并且封装后具有el-input原本的属性 事件 插槽 下面为测试页面即组件调用 <script> import CustomInput from /components/CustomInput.vue;export default {name: TestPage,components: { CustomInput },data() …

jvm中jdk常用的几个命令总结

1.jmap 此命令可以用来查询内存信息&#xff0c;实例个数及占用内存大小 1.1 查看堆内存概要信息&#xff08;内存分配统计&#xff09; jmap -histo[:live] <pid> .-histo&#xff1a;显示堆中对象的统计信息&#xff0c;包括每个类的实例数量、占用内存大小等 :live…

从入门到弃坑:一个后端开发到鸿蒙开发的简单尝试

【摘要】 笔者说&#xff1a;因为本人也从未接触 Android 开发&#xff0c;所以本文也是从小白入门的角度学习 HarmonyOS开发&#xff0c;文中大量的内容和观点其实都可以从官方文档查阅到。写这篇文章大概也是从中精简内容&#xff0c;记录学习 HarmonyOS 的过程。 鸿蒙操作系…

四大生成式模型的比较——GAN、VAE、归一化流和扩散模型

比较四大模型的本质 four modern deep generative models: generative adversarial networks, variational autoencoders, normalizing flows, and diffusion models 待写

基于SpringBoot的“酒店管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“酒店管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统结构图 系统首页界面图 用户注册界面图 个人…

政安晨:【深度学习神经网络基础】(六)—— 前馈神经网络

目录 简述 前馈神经网络结构 计算输出 初始化权重 径向基函数神经网络 径向基函数 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎…

.NET MAUI Android Emulator运行错误 APT2000 系统找不到指定的文件

前言 本地.NET MAUI项目使用Android Emulator&#xff08;安卓模拟器&#xff09;调试运行&#xff0c;提示异常&#xff1a;严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误 APT2000 系统找不到指定的文件。 错误原因 文件目录中不能…

无监督学习~clustering

什么是clustering&#xff1f; 聚类算法查看多个数据点&#xff0c;并自动找到彼此相关或相似的数据点。 K-means clustering 示例 循环&#xff1a;再次分配每个点到离它最近的质心&#xff0c;重新计算质心。 K-means algorithm 注意&#xff1a; k-means的初始化质心Mu有…

大话设计模式之单例模式

单例模式是一种创建型设计模式&#xff0c;它确保类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。 单例模式通常在以下情况下使用&#xff1a; 当一个类只能有一个实例&#xff0c;并且客户端需要访问该实例时。当该唯一实例需要被公开访问&#xff0c;以便在…

微服务-2 Eureka

Eureka 启动页面&#xff1a; 同理再注册完order-service后&#xff0c;刷新启动页面&#xff1a; userservice 启动多台服务&#xff1a; [ 代码 ]&#xff1a;orderService.java&#xff08;用 RestTemplate 调其他服务&#xff0c;用 userservice 代替 localhost:8081&…

CUDA10安装与卸载,CUDA10.2与MMSEG安装

安装CUDA10 1、因为要用到tensorflow1.15.5的GPU版本&#xff0c;所以想安装cuda10来进行加速&#xff0c;通过nvidia-smi检查本机上的CUDA版本 2、下载的cuda10版本&#xff0c;cuda_10.0.130_411.31_win10.exe 下载的cudnn版本&#xff0c;cudnn-10.0-windows10-x64-v7.6.4…