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

本文详细阐述了事务的ACID特性,包括原子性、一致性、隔离性和持久性,以及并发事务可能带来的问题如脏读、不可重复读和幻读。介绍了如何通过隔离级别和日志机制(redolog和undolog)来解决这些问题,最后涉及多版本并发控制(MVCC)在保证事务隔离性中的作用。
摘要由CSDN通过智能技术生成

概述

事务的特性(ACID)

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

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

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

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

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

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

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

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

脏读、不可重复读和幻读的区别为:脏读中A事务读取了B事务还未提交的数据(事后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会自动呈现给用户正确版本的数据从而保证事物的隔离性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值