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

秋招后端开发面试题 - MySQL事务


目录

  • MySQL事务
    • 前言
    • 面试题
      • 什么是数据库事务
      • 为什么要有事务呢?
      • 项目中遇到的事务
      • 事务的传播机制
      • 事务的特性?
      • 事务并发存在的问题
      • 四大隔离级别
      • 四大隔离级别,都会存在哪些并发问题呢
      • 数据库是如何保证事务的隔离性的呢?
      • 如何解决加锁后的性能问题的?
      • 并发事务有什么什么问题?应该如何解决?
      • MySQL 事务实现原理是什么?
      • 事务的两阶段提交协议


MySQL事务

前言

已经找到工作了,分享秋招时的笔记。祝大家都能顺利找到自己心仪的工作。


面试题

什么是数据库事务

事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行

为什么要有事务呢?

  • 保证数据的最终一致性

项目中遇到的事务

  • 下单减库存

事务的传播机制

事务的特性?

ACID

  • 原子性: 事务作为一个整体被执行,包含在其中的对数据库的操作要么全部都执行,要么都不执行
  • 一致性: 指在事务开始之前和事务结束以后,数据不会被破坏
  • 隔离性: 多个事务并发访问时,事务之间是相互隔离
  • 持久性: 表示事务完成提交后,该事务对数据库所作的操作更改,将持久地保存在数据库之中

事务并发存在的问题

事务并发会引起脏读、不可重复读、幻读问题。

  • 脏读:一个事务读取到了另一个未提交事务修改过的数据
  • 不可重复读:同一个事务内,前后多次读取,读取到的数据内容不一致
  • 幻读:如果一个事务先根据某些搜索条件查询出一些记录,在该事务未提交时,另一个事务写入了记录,导致两次读取到的数据内容不一致

四大隔离级别

  • 读未提交: 只限制了两个数据不能同时修改,但是修改数据的时候,即使事务未提交,可以被别的事务读取到
  • 读已提交: 当前事务只能读取到其他事务提交的数据
  • 可重复读: 限制了读取数据的时候,不可以进行修改
  • 串行化: 事务最高的隔离级别,所有事务都是进行串行化顺序执行的

四大隔离级别,都会存在哪些并发问题呢

  • 读未提交:脏读、不可重复读、幻读
  • 读已提交:不可重复读、幻读
  • 可重复读:幻读
  • 串行化:无

数据库是如何保证事务的隔离性的呢?

  • 数据库是通过加锁,来实现事务的隔离性的
  • 比如串行化隔离级别就是加锁实现的,但是频繁的加锁,导致读数据时,没办法修改,修改数据时,没办法读取,大大降低了数据库性能

如何解决加锁后的性能问题的?

使用MVCC 多版本并发控制

并发事务有什么什么问题?应该如何解决?

并发事务可能造成:脏读、不可重复读和幻读等问题 ,这些问题其实都是数据库读一致性问题,必须由数据库提供一定的事务隔离机制来解决

  • 加锁:在读取数据前,对其加锁,阻止其他事务对数据进行修改
  • 提供数据多版本并发控制(MVCC),也称为多版本数据库:不用加任何锁, 通过一定机制生成一个数据请求时间点的一致性数据快照(Snapshot), 并用这个快照来提供一定级别的一致性读取,从用户的角度来看,好像是数据库可以提供同一数据的多个版本

MySQL 事务实现原理是什么?

以 InnoDB 的事务实现为例

  • InnoDB 是通过MVCC解决不可重复读问题
  • 间隙锁解决幻读问题
  • 事务的隔离性是通过实现
  • 而事务的原子性、一致性和持久性则是通过事务日志实现

事务的两阶段提交协议

  • 开启 binlog 的情况下,为了保证 binlog 与 redo log 的一致性,MySQL 将采用事务的两阶段提交协议
  • 当 MySQL 系统发生崩溃时,事务在存储引擎内部的状态可能为准备状态和提交状态两种
  • 对于准备状态的事务,是进行提交操作还是进行回滚操作,需要参考 binlog
    • 如果事务在 binlog 中存在,那么将其提交
    • 如果不在 binlog 中存在,回滚

秋招后端开发面试题系列目录
一、Java
1.1 Java基础上
1.2 Java基础下
1.3 Java集合
1.4 JavaIO
1.5 Java多线程上
1.6Java多线程下
二、JVM
2.1 JVM底层原理
2.2 垃圾回收器
2.3 垃圾回收算法
2.4 类加载机制
2.5 运行时数据区
三、MySQL
3.1 MySQL基础
3.2 事务
3.3 索引
3.4 锁机制
3.5 MVCC
四、Redis
4.1 Redis基础
4.2 缓存原理
五、中间件
5.1 RabbitMQ
六、Spring开源框架
6.1 Spring
6.2 Spring MVC
6.3 Spring Boot
6.4 MyBatis
七、操作系统
八、计算机网络
九、设计模式
十、微服务架构
十一、Spring Cloud分布式
11.1 分布式基础
11.2 Spring Cloud
11.3 GateWay
11.4 Nacos
11.5 OpenFeign
11.6 Ribbon
十二、算法
十三、项目

http://www.lryc.cn/news/345727.html

相关文章:

  • C语言栈的含义与栈数据操作代码详解!
  • 数据库基础语法二
  • 数据库的一些知识点
  • [AutoSar]BSW_Com021单帧 首帧 流控帧 连续帧 详解
  • CSS学习笔记之中级教程(一)
  • Spring Cloud Alibaba 网关 Gateway 集成(7)
  • 低代码技术赋能未来乡村建设:创新与实践
  • 基于Springboot的房屋租赁管理系统(有报告)。Javaee项目,springboot项目。
  • 跨平台移动应用开发指南:打造跨越iOS和Android的移动应用
  • QT+多线程编程
  • 设计模式——迭代器模式(Iterator)
  • 在k8s中安装Grafana并对接Prometheus,实现k8s集群监控数据的展示
  • 【JavaScript】内置对象 - 数组对象 ③ ( 数组反转 - reverse 方法 | 数组排序 - sort 方法 | 自定义数组排序规则 )
  • ctfshow web入门 php反序列化 web267--web270
  • 智慧公厕解决什么问题?实现了什么样的价值?
  • IATF16949认证是什么?
  • 【Vue2】关于response返回数据的错误小记
  • 深入理解C++构造函数和析构函数
  • CMakeLists.txt语法规则:数学运算 math
  • 图片无损压缩工具-VIKY
  • 【Linux操作系统】:文件操作
  • 渗透之sql注入----二次注入
  • LeetCode 每日一题 ---- 【2105. 给植物浇水 II】
  • 【刷题】代码随想录算法训练营第三十五天|435、无重叠区间,763、划分字母区间 ,56、合并区间
  • 【JVM】了解JVM规范中的虚拟机结构
  • 西藏在线教育系统哪家好,培训机构为什么讲师流动大?该如何留住讲师?
  • 智能文档提取
  • 封装Springboot基础框架功能-03
  • 汽车EDI:IAC Elmdon EDI 对接指南
  • IPFoxy:什么是静态住宅IP?静态ISP代理指南