黑马Java面试笔记之MySQL篇(事务)

article/2025/8/6 7:28:15

一. 事务的特性

事务的特性是什么?可以详细说一下吗?

         事务是一组操作的集合,他是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

ACID

  • 原子性(Atomicity):事务是不可分割的最小操作单位,要么全部成功,要么全部失败
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
  • 持久性(Durability);事务一旦提交或回滚,他对数据库中的数据的改变就是永久的

总结

二. 并发事务

并发事务带来哪些问题?怎么解决这些问题?MySQL的默认隔离级别是?

 2.1 并发事务

 解决方案:对事务进行隔离

 注意:事务隔离级别越高,数据越安全,但是性能越低。

总结

 参考回答如下:

 三. undo log和redo log的区别

  • 缓冲池(buffer pool):主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),以一定频率刷新到磁盘,从而减少磁盘IO,加块处理速度
  • 数据页(page):是InnoDB存储引擎磁盘管理的最小单位,每个页的大小默认为16KB.页中存储的是行数据。

3.1 redo log

         重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性

       该日志文件由两部分组成:重做日志缓冲(redo log buffer)以及重做日志文件(redo log file),前者是在内存中,后者在磁盘中,当事务提交之后会把所有修改信息都存到该日志文件中,用于再刷新脏页到磁盘,发生错误时,进行数据恢复使用。

 3.2 undo log

        回滚日志,用于记录数据被修改前的信息,作用包含两个:提供回滚 和 MVCC(多版本并发控制)。undo log 和 redo log 记录物理日志不一样,他是逻辑日志。

  • 可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,反之亦然
  • 当update一条记录时,他记录一条对应相反的update记录。当执行rollback时,就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。

 

总结

 


四. 如何保证事务中的隔离性

事务中的隔离性是如何保证的呢?

4.1 MVCC

        全称是 Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突

        MVCC的具体实现,主要依赖于数据库记录中的隐式字段,undo log日志、readView

  •  记录中的隐藏字段

  • undo log版本链

  • readview

        ReadView(读视图)是快照读SQL执行时MVCC提取数据的依据,记录并维护系统当前活跃的事务(未提交的)id

  • 当前读

        读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,如:select... lock in share mode(共享锁),select ... for update 、update、insert、delete、(排他锁)都是一种当前读。

  • 快照读

        简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。       

  • Read Committed:每次select,都生成一个快照读。
  • Repeatable Read:开启事务后第一个select语句才是快照读的地方。

         ReadView 中包含了四个核心字段

 版本链数据访问原则

 

 总结

 

 五. 主从同步原理

        MySQL主从复制的核心就是二进制日志

总结


六. 分库分表

你们项目用过分库分表吗?

6.1 拆分策略

  • 垂直分库

以表为依据,根据业务将不同表拆分到不同库中。

    特点

    1. 按业务对数据分级管理、维护、监控、扩展
    2. 在高并发下,提高磁盘IO和数据量连接数
    • 垂直分表

    特点

    1. 冷热数据分离
    2. 减少IO过渡争抢,两表互不影响
    • 水平分库

    • 水平分表

    6.2 分库分表的策略有哪些

    6.3 总结


    http://www.hkcw.cn/article/QjFwejvMjX.shtml

    相关文章

    AI炼丹日志-27 - Anubis 通过 PoW工作量证明的反爬虫组件 上手指南 原理解析

    点一下关注吧!!!非常感谢!!持续更新!!! Java篇: MyBatis 更新完毕目前开始更新 Spring,一起深入浅出! 大数据篇 300: Hadoop&…

    WEBSTORM前端 —— 第3章:移动 Web —— 第4节:移动适配-VM

    目录 一、适配方案 二、VM布局 ​编辑 三、vh布局 四、案例—酷我音乐 一、适配方案 二、VM布局 三、vh布局 四、案例—酷我音乐

    AI:使用 Keras 实现线性回归模型

    🌟从零开始:使用 Keras 实现线性回归模型(附完整代码 + 可视化教程)🔢📈 ✨线性回归是机器学习中的“Hello World”,适合新手入门。本文将通过一个完整的实战案例,带你使用 TensorFlow Keras 搭建一个线性回归模型,并对训练与预测结果进行可视化分析。 📎 本文亮…

    TDengine 基于 TDgpt 的 AI 应用实战

    基于 TDgpt 时序数据智能体的风力发电预测 作者: derekchen Demo 数据集准备 我们使用公开的UTSD数据集里面的某风场发电数据,作为预测算法的数据来源,基于历史数据预测未来一天内的每15分钟的发电量。原始数据集的采集频次为4秒&#xff…

    模拟实现线程池(线程数目为定值)和定时器

    前言 昨天学习关于定时器的相关知识。今天花时间去模拟实现了一个定时器,同时也去模拟实现了一个线程池(线程数目为定值)。我感觉我收获了很多,对于线程的理解加深了。跟大家分享一下~ 线程池和定时器(这个是主要)的实现 代码 线程池 import java.ut…

    JMeter 性能测试

    1.定时器 1.1 同步定时器 作用:阻塞线程使同时达到n个线程之后再发出请求,模拟高并发的场景。 路径:右键请求--添加--定时器--Synchronizing Timer 2.2 常数吞吐量定时器 作用:模拟服务器负载,即需要服务器以一个固定…

    通俗易懂的 JS DOM 操作指南:从创建到挂载

    目录 🧩 1. 创建元素:document.createElement / createElementNS 📝 2. 创建文本:document.createTextNode ✏️ 3. 修改文本:node.nodeValue 🗑️ 4. 移除元素:el.removeChild() &#x1…

    串口通信技术及USART应用研究

    串口通信技术及USART应用研究 # 串口通信技术及USART应用研究 摘要:本文深入探讨了串口通信技术的基本原理、硬件电路设计以及USART(通用同步/异步收发器)在STM32微控制器中的应用。首先对通信接口进行了概述,分析了不同通信协议…

    OneRef论文精读(补充)

    接上篇:OneRef论文精读 The five referring datasets 这些数据集应用于指代表达式理解(REC)、短语定位(PG)及指代表达式分割(RES)任务。表8列出了详细的统计数据。 RefCOCO/RefCOCO/RefCOCOg&…

    vscode 代理模式(agent mode),简单尝试一下。

    1. 起因, 目的: agent mode, 很流行,名气很大。简单试试效果,确实很强。agent mode, 取代人工,确实是前进了一大步。 2. 先看效果 效果对比,左边是 普通的AI 生成的, 右边是 代理…

    Scratch节日 | 六一儿童节抓糖果

    六一儿童节怎么能没有糖果?这款 六一儿童节抓糖果 小游戏,让你变身小猫,开启一场甜蜜大作战! 🎮 游戏玩法 帮助小猫收集所有丢失的糖果,收集越多分数越高! 小心虫子一样的“坏糖果”&#xff…

    【Linux系统】第八节—进程概念(上)—冯诺依曼体系结构+操作系统+进程及进程状态+僵尸进程—详解!

    hi,我是云边有个稻草人 偶尔中二的博主^(* ̄(oo) ̄)^,与你分享专业知识,祝博主们端午节快乐! Linux—本节博客所属专栏—持续更新中—欢迎订阅! 目录 一、冯诺依曼体系结构 二、操作系统(Opera…

    告别手动绘图!基于AI的Smart Mermaid自动可视化图表工具搭建与使用指南

    以下是对Smart Mermaid的简单介绍: 一款基于 AI 技术的 Web 应用程序,可将文本内容智能转换为 Mermaid 格式的代码,并将其渲染成可视化图表可以智能制作流程图、序列图、甘特图、状态图等等,并且支持在线调整、图片导出可以Docke…

    PCB设计教程【强化篇】——USB拓展坞PCB布局

    前言 本教程基于B站Expert电子实验室的PCB设计教学的整理,为个人学习记录,旨在帮助PCB设计新手入门。所有内容仅作学习交流使用,无任何商业目的。若涉及侵权,请随时联系,将会立即处理 目录 前言 一、前期准备与板框…

    EC11旋转编码器,Versatile_RotaryEncoder库详解

    旋转编码器与电位器 旋转编码器是电位器的现代数字等效物,并且用途更广泛。 旋转编码器可以不停地旋转360,而电位器只能旋转3/4圈。 电位器用于需要知道旋钮准确位置的情况。另一方面,旋转编码器用于需要知道位置变化而不是确切位置的情况…

    【金融基础学习】债券回购方式

    债券回购作为货币市场的重要工具,本质上是一种以债券为抵押的短期资金借贷行为。在银行间市场,质押式回购与**买断式回购*是两种主要形式。 1. 质押式回购(Pledged Repo, RP) – 所有权不转移的短期融资工具 1.1 质押式回购概述 质押式回购是交易双方…

    助力高校AI教学与科研:GpuGeek推出618算力支持活动

    618期间,GpuGeek推出面向高校师生的专属算力支持计划,6月5日至25日活动期间,完成学生认证的用户充值即可获得"学霸礼包",同时平台算力嘉年华活动还将为用户提供额外算力赠送,有效降低了AI学习与研究的资源门…

    多线程( Thread)

    线程:是一个程序内部的一条执行流程。 多线程:是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)。 创建线程: 多线程的创建方式之一:继承Thread类 1.定义一个子类MyThread继承线程类…

    Vue-2-前端框架Vue基础入门之二

    文章目录 1 计算属性1.1 计算属性简介1.2 计算属性示例 2 侦听器2.1 简单的侦听器2.2 深度监听2.3 监听对象单个属性 3 vue-cli3.1 工程化的Vue项目3.2 Vue项目的运行流程 4 vue组件4.1 Vue组件的三个部分4.1.1 template4.1.2 script4.1.3 style 4.2 组件之间的关系4.2.1 使用组…

    LTSPICE仿真电路:(三十二)差动放大器电流源

    1.差动放大器电流源 本来是和HOWLAND电流源在一起的,后面想着以后不一定好查找,不如重新另起一篇算了,和前一章的电流源有比较接近的地方,四个电阻直接变成差动放大器内部的东西。 方框中的就是差动放大器,也是负反馈…