面试八股——数据库——事务

概述

事务的特性(ACID)

原子性:事务是不可分割的操作单元,要么全部成功,要么全部失败

一致性:事务结束时,所有数据都必须保证一致状态。

隔离性:事务在独立环境运行,不会受到外部的并发操作的影响

持久性:事务一旦提交或回滚,他对数据的改变是永久性的。(保存在磁盘中)

以转账为例:假设A向B转账100元。则A账户-100,B账户+100。

原子性则保证A账户-100,B账户+100操作要么都成功,要么都失败。

一致性保证A账户必须-100,B账户必须+100。

并发事务产生的问题以及解决办法
并发事务主要产生的问题

脏读、不可重复读和幻读的区别为:脏读中A事务读取了B事务还未提交的数据。不可重复读中A事务要对某一数据读取两次,在这两次间隔中,B事务对相应的数据进行了修改。幻读简言之是查数据时没找到该数据,但是后来插入时发现数据已存在。

解决方法

解决方案就是对事物进行隔离。从上到下隔离级别越高,但是性能越低。Mysql默认的事务隔离级别为可重复读

redo log与undo log日志文件(redo保证持久性、undo保证原子性和一致性)

 首先先了解缓冲池和数据页的概念:

缓冲池是内存一片空间,当数据库执行增删改查时,可先操作缓冲池中的数据(没有的话就将数据从磁盘加载到缓冲池),从而减少磁盘I/O。

数据页是数据库最小的存储单元,一个数据页存储一行记录

那么如果缓存中的数据没有提交到磁盘更新时,系统发生故障,此时缓存中的数据会丢失,从而无法保证事务的持久性,此时就需要日志文件对数据进行恢复。

redo log日志文件

undo log日志文件

二者区别

多版本并发控制mvcc(保证事物的隔离性)

如果有多个事务对同一数据进行写操作,那么会产生这个数据的不同版本,当某个事物需要读取这个数据时,mvcc会自动呈现给用户正确版本的数据从而保证事物的隔离性。

总结

事务的特性

原子性:事务是不可分割的操作单元,要么全部成功,要么全部失败

一致性:事务结束时,所有数据都必须保证一致状态。

隔离性:事务在独立环境运行,不会受到外部的并发操作的影响

持久性:事务一旦提交或回滚,他对数据的改变是永久性的。(保存在磁盘中)

并发事务产生的问题以及解决办法

解决方案就是对事物进行隔离Mysql默认的事务隔离级别为可重复读

redo log与undo log日志文件

见上面

MVVC

如果有多个事务对同一数据进行写操作,那么会产生这个数据的不同版本,当某个事物需要读取这个数据时,mvcc会自动呈现给用户正确版本的数据从而保证事物的隔离性。

相关推荐

  1. C++面试八股--inline函数

    2024-04-13 11:58:03       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 11:58:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 11:58:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 11:58:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 11:58:03       18 阅读

热门阅读

  1. 华为改进点

    2024-04-13 11:58:03       15 阅读
  2. Spark Kubernetes 的源码分析系列 - scheduler

    2024-04-13 11:58:03       17 阅读
  3. OR-TOOL 背包算法

    2024-04-13 11:58:03       16 阅读
  4. MyBatis输出映射

    2024-04-13 11:58:03       14 阅读
  5. vue创建一个项目

    2024-04-13 11:58:03       15 阅读
  6. Ubuntu 安装Cuda 12

    2024-04-13 11:58:03       19 阅读
  7. 【C++】string的模拟实现

    2024-04-13 11:58:03       17 阅读
  8. 机器学习和深度学习常见算法

    2024-04-13 11:58:03       16 阅读
  9. 如何实现vue点击按钮进行图片浏览 ?

    2024-04-13 11:58:03       33 阅读
  10. 机器学习—1.快速入门

    2024-04-13 11:58:03       19 阅读