MySQL 自学重点笔记分享 - 事务&锁

面试官问:如果让你写一个配置中心,说说你的设计思路? 不要慌,看这个! 前言 一位读者朋友跟我反馈,能不能写一篇比较全的配置中心的文章。自己最近在面试过程中有被面试官问:如何设计一个配置中心? 这个话题,由于自己在工作中也没实际使用过配置中心,所以对于如何去设计是完全没有概念的。 今天就给大家写一篇去配置中心需要考虑的点,我也不是什么配置中心开源项目的参与者,所以写出来的仅供大家参考。 开始之前,记得点赞收藏加关注哦 ,我这里也准备了很多面试热门知识点和大厂面试题,希望对大家有帮助!有需要的朋友可以点一点下方链接免费领取 链接:点这里!!! 暗号:优快云 有必要重复 阅读详情

事务

简单的说,事务就是一组原子性的 SQL 查询,这一组 SQL 要么全部执行成功,要么全部执行失败。这里简单介绍一下事务的 ACID,ACID 表示原子性、一致性、隔离性和持久性。

  • 原子性:一个事务是不可分割的最小工作单元,整个事务要么全部成功,要么全部失败,不可能只执行中间的一部分操作。
  • 一致性:执行事务是使得数据库从一个一致性状态到另一个一致性状态,如果事务最终没有被提交,那么事务所做的修改也不会保存到数据库中。
  • 隔离性:通常来说,一个事务提交之前对其他事务是不可见的,但是这里所说的不可见需要考虑隔离级别,比如未提交读在提交前对于其他事务来说也是可见的,隔离级别,在下面会详细讲。
  • 持久性:事务一旦被提交,那么对数据库的修改会被永久的保存,即使数据库崩溃修改后的数据也不会丢失。

记得点赞收藏加关注哦 ,需要下载PDF版本和更多知识点、面试题的朋友可以点一点下方链接免费领取

链接:点这里!!! 799215493 暗号:优快云

在这里插入图片描述

隔离级别

SQL 标准中定义了四种隔离级别,这里简单介绍一下这四种隔离级别。

  • 未提交读:未提交读的意思是,事务中的修改,即使没有提交,对其他事务也都是可见的,但是这样会出现脏读,一般情况下,通常都不会使用未提交读。
  • 提交读:提交读的意思是,一个事务所做的修改在提交之前对其他事务都是不可见的,这个级别也叫做“不可重复读”,因为执行两次相同的操作,可能会得到不同的结果。
  • 可重复读:可重复读解决了脏读的问题,这个级别保证了同一个事务多次读取同样记录的结果是一致的,但是这个隔离级别无法解决幻读的问题,所谓幻读就是说,当某个事务读取范围数据时,另一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围数据时,会产生幻行。InnoDB 存储引擎通过 MVCC 解决了幻读的问题,可重复读是 MySQL 默认的事务隔离级别。
  • 可串行化:是最高的隔离级别,避免了前面说到的幻读问题。可串行化会给读取的每一行都加锁,所以可能导致大量超时和锁争用的问题,实际中很少使用这个隔离级别。

死锁

死锁是指两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源。解决死锁的方法就是回滚一个或者多个事务。

MVCC

MVCC 可以看做是行锁的一个变种,在很多情况下 MVCC 可以避免加锁,因此开销更小,不同事务型存储引擎对于 MVCC 的实现各有不同。

MVCC 的实现是通过保存数据在某个时间点的快照来实现的。也就是说,不管执行多长时间,每个事务看到的数据都是一致的。根据事务的开始时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。这里简单介绍一下 InnoDB 的 MVCC。

InnoDB 的 MVCC 通过在每行记录后面保存两个隐藏的列来实现。这两个列,一个保存了行的创建时间,一个保存了行的过期时间,存储的不是实际的时间,而是版本号。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号作对比。下面详细介绍一下在可重复读隔离级别下,MVCC 的具体操作。

SELECT

InnoDB 会根据以下两个条件检查每条记录:

  • 只查找版本小于等于事务版本号的行
  • 只查找未定义删除时间或者删除时间大于事务版本号的行
INSERT

InnoDB 为新插入的每一行保存当前的系统版本号作为行版本号

DELETE

InnoDB 为删除的每一行保存当前的系统版本号作为行的删除版本号

UPDATE
  • InnoDB 新增一条记录,保存当前系统版本号作为新增行的版本号
  • 在被删除记录的原始行,保存当前系统版本号作为被删除记录行的删除版本号
优点:
  1. 因为有了两个隐藏列来记录数据的状态,所以大多数读操作都可以不加锁
  2. 性能好,同时可以保证读取的数据是正确的
缺点:
  1. 需要额外的空间记录每行的状态
  2. 需要行状态的维护和检查

如何解决幻读

MVCC 解决幻读的时候使用了间隙锁,也就是 next-key lock,这部分就要先从 InnoDB 的三种行锁说起:

  1. Record Lock:单个行记录上的锁,锁住的是索引
  2. Gap Lock:区间锁,锁定一个区间范围,但不包括记录本身,开区间
  3. Next-Key Lock:间隙锁,Record Lock + Gap Lock

举个简单的例子,

select id from user where id > 15 and id < 30

在这里插入图片描述
图示清楚的表示了间隙锁~

总结

在这里也为大家整理了各个知识点模块整理文档(微服务、数据库、mysql、jvm、Redis等都有)和更多大厂面试真题,有需要的朋友可以点一点下方链接免费领取

链接:点这里!!! 799215493 暗号:优快云

在这里插入图片描述
在这里插入图片描述

【MySQL深度剖析】面试被问到mysql事务,怎么回答才是面试官想要的? 写在前面 相信大部分小伙伴在面试过程中,只会针对面试官提出的表面问题来进行回答。其实不然,面试官问的每一个问题都是经过深思熟虑的,面试的时间相对来说也是短暂的,面试官不可能在很短的时间内就对你非常了解,他想通过几个问题来考察你所掌握的知识的深度和广度,如果你只是回答面试官表面问你的问题,向挤牙膏一样,问一点,答一点,结果不用说,肯定是凉凉了。 开始之前,记得点赞收藏加关注哦 ,我这里也准备了很多面试热门知识点和大厂面试题,希望对大家有帮助!有需要的朋友可以点一点下方链接免费领取 链接:点这里!!! 阅读详情

相关推荐

京东Java十年老鸟,总结这些年工作、跳槽、面试之经历

点关注,不迷路;持续更新Java相关技术及资讯!!! 前言 一个礼拜前,之前的一位同事来我这边出差,约好找个地方吃饭,推杯换盏之间讲起了现在的工作、生活。讲述到之前在京东,现在创业。路程坎坷! 总之是我在吹牛*,他是真牛* !说的工作、跳槽、面试之经历,今天有时间就整理分享一下!希望对你有帮助! 关于工作 如何展示自己项目中的亮点,技术或者难点: 总结我的经历和技术倒是可以,但是我做的项目和...

XingXing_Java的博客 2741

MySQL事务与锁详解

事务 事务支持ACID特性 A原子性:所有操作要么都做要么都不做 C一致性:事务将数据库从一种状态变为另一种状态一致性,保证数据库完整性约束,例如唯一索引约束等 I隔离性:事务与事务之间是不可见的 D持久性:事务一旦提交那么事务就是永久性的 ANSI/ISO SQL标准定义了4中事务隔离级别:未提交读(read uncommitted),读提交(read committed),可重复读(repea...

Coder Liu的博客 1万+

hcaptcha无感验证码逆向实战:从接口分析到环境补全

本文详细解析了hcaptcha无感验证码的逆向实战过程。通过分析核心接口与加密逻辑,重点介绍了采用环境补全策略来模拟真实浏览器环境,从而绕过验证码检测。文章提供了从接口抓包、剖析hsw.js加密核心到使用Node.js搭建模拟环境的完整步骤,为自动化操作提供了一种稳健的解决方案。

weixin_29324401的博客 1151

网页初学者,如何使用VS2005搭建编程环境(JavaScript及ASP调试)

这样就可以使用F10,等等,什么功能都有了,也可以一步步的运行,VS会进入每个相应的源代码中。手工添加断点语句,运行网站,就会弹出一个异常选择框,如何是在VS方案中有源码,VS可以智能识别,这个功能太强了。使用以下注册表文件,导入后,重新启动后,就可以。客户端Javascript脚本的调试,有很多方法,我用最简单的,就是IE8.0自己带的功能。调试的设置,打开“开发人员工具”后,选择“启动调试”,右边下拉按钮中,选择要调试的JS文件。设置断点后,刷新自己的网页,如遇调用这个断点处的代码,调试就会激活,

自学C++,会写HelloWorld 3724

告别版本冲突!在Ubuntu 20.04上优雅实现ROS Noetic与ROS2 Foxy双环境切换

本文详细介绍了在Ubuntu 20.04系统上实现ROS Noetic(ROS1)与ROS2 Foxy双环境共存与切换的完整方案。通过智能脚本设计和工作空间隔离,解决了版本冲突问题,帮助开发者高效管理不同ROS版本项目。特别适合需要同时开发ROS1和ROS2应用的机器人开发者。

weixin_28452161的博客 407

手把手教你用Node.js模拟大麦APP下单请求(含滑块验证处理)

本文详细解析了如何使用Node.js模拟大麦APP下单请求的全流程,包括接口逆向、滑块验证处理和签名算法逆向等关键技术。通过实战案例和代码示例,帮助开发者掌握移动端API调用的核心要素,如动态参数构造、安全验证突破等,提升自动化下单的成功率和效率。

weixin_42569329的博客 353

MySQL 8.4 + Navicat 17 本地环境避坑指南

MySQL 是最主流的关系型数据库管理系统,Navicat 则是广泛使用的可视化数据库管理工具。理解其底层原理——如认证插件机制、字符集配置、服务注册逻辑与连接协议差异——是构建稳定本地开发环境的关键。MySQL 8.4 默认采用 caching_sha2_password 认证方式,而 Navicat 对 mysql_native_password 兼容性更佳;utf8mb4 字符集支持完整 Unicode(含 emoji),避免中文乱码与导入失败。这些技术细节直接决定连接成功率、数据一致性与团队协作效率

weixin_34253126的博客 538

primetime如何做voltage scaling

存在这样的情况,标准单元库只有ssgnp0p72vm40c和ssgnp0p9vm40c的libs,但是我们希望它工作在ssgnp0p76vm40c,这样的话就需要用ssgnp0p72vm40c和ssgnp0p9vm40c的libs来scaling出ssgnp0p76vm40c的lib。

qq_34326957的博客 1684

Windows下MySQL 8.4真实部署指南:避坑、权限、认证与Navicat连接

MySQL是关系型数据库的工业标准,其Windows平台部署因服务机制、认证插件和网络通信模型差异,与Linux存在根本性区别。MySQL 8.4在Windows中默认采用TCP/IP或命名管道通信,而非Unix域套接字;root密码不再明文显示,而是动态生成于错误日志,且首次登录需匹配caching_sha2_password认证插件。技术价值在于保障开发环境稳定性与工具链兼容性——尤其影响Navicat、PHP、Java JDBC等主流客户端连接。典型应用场景包括本地Laravel/Spring Boo

weixin_34117211的博客 347

告别CPU空转!用STC8的SPI+DMA高效驱动上百颗WS2812B灯珠

本文详细解析了如何利用STC8单片机的SPI+DMA外设高效驱动WS2812B全彩灯珠,解决传统软件延时驱动方式在长灯带应用中的性能瓶颈。通过硬件方案设计、数据格式转换和DMA传输配置,实现高达400Hz的刷新率和低于5%的CPU占用率,适用于大规模灯光项目。

weixin_30847939的博客 395

PyCharm 怎么不升级直接使用Jupyter Notebook

在PyCharm 中需要升级到 PyCharm Professional 版本,才能直接使用 Jupyter Notebook。从截图来看,Jupyter Notebook 已经成功启动,并且正在运行。这将在默认网络浏览器中打开一个新的标签页,显示文件浏览器界面。可以在这里创建和编辑。文件添加到 PyCharm 项目中,并使用纯文本编辑功能进行修改。支持与外部工具集成,可以配置它以调用命令行工具或脚本来启动。,参数可以根据需要设置,工作目录设置为项目根目录。,你仍然可以在本地环境中安装和运行。

Davina_yu的博客 994

python全套学习资料_20小时学会python的心路历程,附全套学习资料和视频教程

啥也不多说,下面这张图片是我这段时间学习的成果和收获,敬请大家指教呀:20小时的精华其实,说是20小时,这一个多月来,每天磕磕碰碰的,尤其是在刚开始安装软件的时候,差不多磋磨了一个星期左右的时间。当时遇到的问题,现在看来真的好简单,很多事情只有自己做了,才回真正地理解、明白,所以遇到问题,自己去查,去找,实在找不到的再去问,这样的学习才会有成长。下面就来分享下我遇到的,包括大家也会遇到的,很普遍的...

weixin_32124135的博客 249

基于深度学习的X光安检危险品检测系统(YOLOv8 + UI界面 + 数据集)

随着全球安全形势的变化,机场、车站、地铁等场所的安检工作日益重要。X光安检系统已经成为现代公共安全领域中不可或缺的部分,能够有效地检测物品的内部结构,识别潜在的危险品。然而,传统的X光图像分析方法仍然依赖人工操作,检测效率较低,并且易受到人为因素的影响。近年来,深度学习技术的应用在图像分析领域取得了显著的突破,特别是在目标检测任务中,YOLO(You Only Look Once)模型因其高效性和精度,成为了许多目标检测任务的首选模型。

YOLO 1060

数据科学自学路线图:2 年学完一套免费本科课程

data-science 仓库提供一套免费的本科级数据科学课程,以自学路线图的形式组织。按每周约 20 小时投入,大约 2 年可以完成全部课程。学完后的水平相当于数据科学本科毕业生。 ## 🗺️ 学习路线一图看懂 整条路线从数据科学概览课起步,随后分成两条并行推进的线:工程线从编程入门走到数据结构与算法,再进入数据库;数学线从单变量微积分走到线性代数、多变量微积分,再到概率统计。两条线在数据

gitblog_01053的博客 960

计算机视觉:AI生成内容(AIGC)对视觉领域的冲击

计算机视觉:AI生成内容(AIGC)对视觉领域的冲击​ 人工智能,计算机视觉,大模型,AI,在信息技术日新月异的当下,计算机视觉作为人工智能领域的关键分支,已经深度融入了我们生活与工作的各个层面。从安防监控系统里精准的人脸识别,助力维护公共安全;到工业生产线上高效的产品质量检测,保障产品品质;再到医疗影像分析中为疾病诊断提供有力支持,计算机视觉技术凭借其对视觉信息的强大处理与理解能力,不断推动着各行业的发展与变革。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 17万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Redis为什么是单线程还这么快?

点关注,不迷路;持续更新Java相关技术及资讯!!! Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快; 2.redis是单线程的,省去了很多上下文切换线程的时间; 3.redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll...

XingXing_Java的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

这道阿里巴巴多线程面试题,你学会了没有?

点关注,不迷路;持续更新Java相关技术及资讯!!! 背景 在前几天,群里有个群友问了我一道面试阿里的时候遇到的多线程题目,这个题目比较有意思,在这里和大家分享一下。 废话不多说,直接上题目: 通过N个线程顺序循环打印从0至100,如给定N=3则输出: thread0: 0 thread1: 1 thread2: 2 thread0: 3 thread1: 4 ..... 一些经常刷面试题...

XingXing_Java的博客 4835

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

妙啊!真实模拟面试 — 面试官究竟会怎么问 数据库索引呢?

什么是索引? 面试官:我看你项目中有做过 SQL 优化,那我们今天就来聊聊索引吧。 (索引能问些啥,无非是索引的概念、索引的使用规则、索引的分类、索引的原理。嘻嘻~我早有准备) 我:数据库中的索引,简单来说呐,就好比一本书的目录,它可以帮我们快速进行特定值的定位与查找,从而加快数据查询的效率。 如果我们不使用索引,就必须从第 1 条记录开始依次往后查找,直到把所有的数据表都查找完,才能找到想要的数据。 记得点赞收藏加关注哦 ,需要下载PDF版本和更多知识点、面试题的朋友可以点一点下方链接免费领取 链接:点

XingXing_Java的博客 3867

阿里巴巴、百度、美团、面试题大集合,愿你更轻松拿下大厂offer。

点关注,不迷路;持续更新Java相关技术及资讯!!! 以下内容呕心沥血收集了很久,内容有点长 。希望点个喜欢,给个评论!分享给更多的朋友! 我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)。如何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素,从这一角度来说,锁对于数据库而言就显得尤为重要。 M...

XingXing_Java的博客 3357

BAT大厂招聘 Java 程序员的技术标准,你达到要求了吗?

点关注,不迷路;持续更新Java相关技术及资讯!!! 前言 关注过的朋友都知道我更新很多面试经历 这些经历都是粉丝的投稿 今天整理了一篇Java 程序员面试大厂的技术标准 BATJava 程序员的技术标准 阿里巴巴篇 扎实的计算机专业基础,包括算法和数据结构,操作系统,计算机网络,计算机体系结构,数据库等 具有扎实的Java编程基础,理解IO、多线程等基础框架 熟练使用Linux系统的常用...

XingXing_Java的博客 2575

面试官:“来讲讲Spring中都用到了那些设计模式?”。

DK 中用到了那些设计模式?Spring 中用到了那些设计模式?这两个问题,在面试中比较常见。我在网上搜索了一下关于 Spring 中设计模式的讲解几乎都是千篇一律,而且大部分都年代久远。所以,花了几天时间自己总结了一下,由于我的个人能力有限,文中如有任何错误各位都可以指出。另外,文章篇幅有限,对于设计模式以及一些源码的解读我只是一笔带过,这篇文章的主要目的是回顾一下 Spring 中的设计模式。...

XingXing_Java的博客 1216

一篇文章带你读懂MySQL索引结构和查询优化!

MySQL官方文档中(https://dev.mysql.com/doc/refman/5.7/en/optimization-indexes.html)有这样一段描述: The best way to improve the performance of SELECT operations is to create indexes on one or more of the columns that are tested in the query. But unnecessary indexes was

XingXing_Java的博客 1127

Java开发必须要掌握的20个核心技术,你掌握多少?JVM是重点!

点关注,不迷路;持续更新Java相关技术及资讯!!! 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。 不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的。 JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透。 面试有超过3年Java经验的开发者的时候, JVM几乎就是一个...

XingXing_Java的博客 1017

2020最新MySQL面试题总结(基础-实战-高级进阶)

前言 作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上,MySQL并不难,今天这份最全的MySQL总结,助你向大厂“开炮”,面试不再被MySQL难倒。 MySQL 面试题(基础部分) drop、truncate、 delete区别 数据库三范式是什么? union和union all有什么不同? char、varchar2、varchar有什么区别? 合并查.

XingXing_Java的博客 929

Java,我是这样学的。

说起以前那都是青春,吹不完的牛P,追不完的女神,现在留下的只有稀疏的发量,和那做不完的项目。打个哈哈 进入正题! 13那年毕业,其实我也和很多人一样,也不是一毕业就开始努力努力地学习的,也有过下班了就玩游戏,上班完成任务就好的日子。 真正开始学习大约14年末15年初的时候,那个时候,还没有像现在这么多的面试经验,这种时候我怎么确定自己的学习方向呢?那个时候我的做法就是刷招聘网站 其实只要刷刷招聘网...

XingXing_Java的博客 604
上一篇: 全网最通俗易懂的 Spring AOP!
下一篇: 全网最强最详细的JVM类加载机制详解!看完不要再说不会了!
XingXing_Java
博客等级 码龄7年 278粉丝 89原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值