MySQL数据库的核心MVCC详解

本文详细解析了MySQL数据库的MVCC(多版本并发控制)机制,旨在提高数据库并发性能,解决读写冲突。介绍了事务隔离级别的概念,如脏读、幻读和不可重复读,并详细阐述了MVCC的实现原理,包括三个隐式字段、undo日志和Read View。同时,讨论了MVCC如何在并发场景下避免阻塞读写操作,以及其带来的性能提升和事务隔离问题的解决方案。
摘要由CSDN通过智能技术生成

在这里插入图片描述

2.MySQL的核心日志


在MySQL数据库中有三个非常重要的日志binlog,undolog,redolog.

在这里插入图片描述  举例演示为:

在这里插入图片描述

3.隔离级别


MySQL的事务隔离级别有四个,分别为:

事务隔离级别指的是一个事务对数据的修改与另一个并行的事务的隔离程度,当多个事务同时访问相同数据时,如果没有采取必要的隔离机制,就可能发生以下问题:

| 问题 | 描述 |

| — | :-- |

| 脏读 | 一个事务读到另一个事务未提交的更新数据,所谓脏读,就是指事务A读到了事务B还没有提交的数据,比如银行取钱,事务A开启事务,此时切换到事务B,事务B开启事务–>取走100元,此时切换回事务A,事务A读取的肯定是数据库里面的原始数据,因为事务B取走了100块钱,并没有提交,数据库里面的账务余额肯定还是原始余额,这就是脏读 |

| 幻读 | 是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样。 |

| 不可重复读 | 在一个事务里面的操作中发现了未被操作的数据 比方说在同一个事务中先后执行两条一模一样的select语句,期间在此次事务中没有执行过任何DDL语句,但先后得到的结果不一致,这就是不可重复读 |

| 隔离级别 | 描述 |

| :-- | :-- |

| READ_UNCOMITTED | 读未提交(脏读)最低的隔离级别,一切皆有可能。 |

| READ_COMMITED | 读已提交,ORACLE默认隔离级别,有幻读以及不可重复读风险。 |

| REPEATABLE_READ | 可重复读,解决不可重复读的隔离级别,但还是有幻读风险。 |

| SERLALIZABLE | 串行化,最高的事务隔离级别,不管多少事务,挨个运行完一个事务的所有子事务之后才可以执行另外一个事务里面的所有子事务,这样就解决了脏读、不可重复读和幻读的问题了 |

在这里插入图片描述数据库的并发场景:

  • 读读:不会存在任何问题,也不需要并发控制

  • 读写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读,需要

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值