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

23春招-mysql事务相关高频面试题

1、什么是事务

对于一个事务,要么事务内的sql全部执行,要么都不执行

2、 事务的特性ACID

  • 原子性

    整个事务中所有的操作要么全部提交成功,要么全部失败会滚。

  • 一致性

    数据库总是从一个一致性状态转换到另一个一致性状态。假如有三个sql语句,如果在更新第二个sql语句时,准备执行第三个sql语句突然崩溃,事务最终没提交,事务做的修改不会保存到数据库

  • 隔离性

​ 一个事务所做的修改在最终提交以前,对其他事务是不可见的

  • 持久性

​ 一旦事务提交,所做的修改永久保存到数据库

3、并发事务带来的问题

  • 脏读

​ 当一个事务正在访问数据并且对数据进行修改,但还没有提交到数据库中,另一个事务访问了这个数据并且使用,但是这个数据还没有提交,则这个数据就是脏数据,后续操作都是不正确的

  • 丢失修改

​ 一个事务读取一个数据时,另一个事务也在访问这个数据,则第一个事务修改了这个数据后,第二个时候也修改了这个数据,则第一个事务修改的结果就会丢失,就是丢失修改

  • 不可重复读

​ 一个事务多次读同一个数据,这个事务还没结束,另一个事务也在访问该数据,那么在一个事务的两次读数据之间,由于第二个时候的修改导致了第一个事务两次读取的数据不一样,

  • 幻读

​ 和不可重复读类似。他发生在一个事务读取了几行数据,另一个事务并发事务插入了一些数据,在随后的查询,第一个事务就会发现多了一些原本不存在的记录,就好像发生了幻觉。

4、隔离性与隔离级别

  • 读未提交 ru

    一个事务还没提交,它做的事情能被其他事物看到

  • 读提交 rc

​ 一个事务提交之后,它做的变更才能被其他事物看到

  • 可重复读 rr (MySQL InnoDB引擎的默认隔离级别

​ 同一个事务多次读取到同样的数据的结果是一致的,InnoDB使用MVCC多并发版本控制解决幻读(并不是完全解决)

  • 串行化 Serializable

    最高的隔离级别,强制事务串行执行,避免幻读,实际是在读取的每一行数据上加锁,会有严重的锁竞争问题,对性能会有一定的影响

5、事务是如何实现的(原理)?

事务日志记录着事务的实现

redo log实现原子和持久性

undo log实现一致性

事务日志是如何实现事务的ACID,请看下一篇什么是事务日志

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

相关文章:

  • 天线理论知识1——基础概念介绍
  • 【云原生之Docker实战】使用Docker部署StackEdit在线Markdown编辑器
  • 特征工程:特征构造以及时间序列特征构造
  • 单master部署简要步骤
  • 【算法基础】(一)基础算法 --- 前缀和与差分
  • c++提高篇——stack容器
  • HTTP安全与HTTPS协议
  • 【c++】类和对象4—c++对象模型和this指针
  • 嵌入式Qt 开发一个视频播放器
  • 阿里巴巴内网 Spring Cloud Alibaba 强势来袭,开创微服务的新时代
  • 边界检测方法总结
  • Softing dataFEED OPC Suite Extended新版本支持从XML文件中读取生产数据
  • 央行罚单!金融机构被罚原因揭秘
  • js中var、let、const详解
  • 【数据库】MySQL概念知识语法-基础篇(DCL),真的很详细,一篇文章你就会了
  • Blender骨骼动画快速教程
  • 【C++算法】dfs深度优先搜索(下) ——【全面深度剖析+经典例题展示】
  • HIVE 基础(三)
  • redis-cluster集群搭建
  • 【C语言】可变参数列表va_list
  • CentOS7.6 MySQL8安装
  • 安装Tomcat的步骤?
  • Redis之分布式锁
  • 2022年中国前10电商GMV总结
  • ES6新增扩展:字符串-数值-数组-函数-对象
  • python中import原理
  • 《Qt6开发及实例》6-4 显示SVG格式图片
  • OpenGL ES 绘制一张图片
  • Python 之 Pandas DataFrame 数据类型的行操作和常用属性和方法汇总
  • MacOS下载钉钉直播回放视频的Python最新解决方案