【Mysql面试高频】-Mysql的MVCC机制、Undo和Redo机制?binlog、undo和redo的区别是什么呢?1 MVCC机制MVCC(Multi-Version Concurrency Control多版本并发控制)。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问;在编程语言中实现事务内存。简单理解:并发访问数据库时(读和写),对正在事务内处理的数据做多            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-18 16:23:22
                            
                                83阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            当前读: select...lock in share mode (共享读锁) select...for update update , delete , insert 当前读, 读取的是最新版本, 并且对读取的记录加锁, 阻塞其他事务同时改动相同记录,避免出现安全问题。 例如,假设要update一 ...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-11-02 18:01:00
                            
                                1197阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            说到mvcc我们就要先说一下它的原理undolog版本链和ReadView机制undolog版本链:undolog其实就是事务回滚我们大家都知道,当事务执行失败的时候,我们就要执行回滚,那么如何执行回滚呢,就要靠undolog,所记录的事务执行之前该行数据所对应的上一个版本的数据。undolog的结构:row_trx_id (记录该行数据所对对应的更新数据的事务id)和 roll_pointer(            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-09-12 08:47:45
                            
                                51阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            ## MySQL当前读和MVCC有关系吗?
### 简介
MySQL是一种常用的关系型数据库管理系统,而MVCC(多版本并发控制)是MySQL中的一种并发控制机制。在MySQL中,事务的隔离级别可以通过设置控制,而MVCC则是实现这些隔离级别的一种机制。
### 流程
下面是实现“MySQL当前读和MVCC有关系吗”问题的整个流程:
```mermaid
journey
    titl            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-09-08 11:04:05
                            
                                41阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1.当前读当前事务对某行数据更新,先读再写,读时可能获得其他事务更新后的数据,这里必须获得因为数据库要保证更新不丢失,这里就违背了rr隔离级别的一致性视图,该现象为当前读现象。类似的,当前事务使用select进行加锁读的时候,无论share mode还是for update,都可能和其他事务的写锁冲突,因此也会触发当前读。当前读和锁等待密不可分。2.online ddl用delete不能释放表占用            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-11 12:15:02
                            
                                187阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            mvcc原理学习和当前读            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-07-09 09:29:25
                            
                                309阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            自己整理的:脏读:在一个事务处理过程里读取了另一个未提交的事务中的数据。不可重复读:一个事务读取到了其他事务已经提交的数据,导致前后两次读取数据不一致的情况,称为不可重复读。幻读:一个事务前后两次读取数据不一致,是由于其他数据插入数据造成的,这种情况叫做幻读。  所谓的MVCC(Multi-Version Concurrency Control ,多版本并发控制)指的就是在使用            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-13 21:57:59
                            
                                103阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、ACID 一个模块,是多个独立的功能逻辑的组合,每个功能包含多个操作步骤,包括IO、计算、数据库等操作,必须保证每一步都被执行,且执行正确,这个功能和模块才是可用,可交付的。 那么,如何保证这些操作的完整性,就是Atomic,定义为一个原子操作,全部执行且成功,或者全部失败都不执行(回滚),原子操作如果成功,那状态就必须持久,被称为数据库的Durability,持久性。原子性A、持久性D,这俩            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-09-09 16:01:41
                            
                                34阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            https://www.bilibili.com/video/BV1LC4y1h7VV?spm_id_from=333.337.search-card.all.click 比如我们进行精准查询后在事务提交前(左图),此时对应行锁,阻止其它事务修改该记录行(右图)。 当我们对没有加索引的数据列进行查询
                    
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-06-01 09:10:51
                            
                                400阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            前提:mvcc是mysql底层为提高并发衍生的一种多版本并发控制机制,全称 Multi-Version Concurrent Control,因避免了了加锁操作,因此开销更更低;注意: 1、只有在读已提交和重复读两个隔离级别下 mvcc才生效; 2、读未提交每次读取都是最新的(快照读),SERIALIZABLE则会对所有读取的⾏都加锁。 图解mvcc例如有一张表account,只有id和name属            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-25 09:04:02
                            
                                45阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            1.  MVCC全称(Multi-Version Concurrency Control), 即多版本并发控制,主要是为了提⾼数据库的并发性能,解决幻读问题。 2.  快照读、当前读 快照读:顾名思义,就是读取的是快照数据,不加锁的普通select都是快照读 当前读:就是读取最新数据,⽽不是历史数据,或者说不是快照数据,是加锁的select,或者对数据进⾏正            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-28 12:38:48
                            
                                250阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            MVCC1. 什么是MVCC?多版本并发控制技术的英文全称是 Multiversion Concurrency Control,简称 MVCC 。 是通过保存数据在某个时间点的快照来实现并发控制的。也就是说,不管事务执行多长时间,事务内部看到的数据是不受其它事务影响的,根据事务开始的时间不同,每个事 ...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-08-31 08:11:00
                            
                                110阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            目录RR隔离级别MVCCRR隔离级别下的幻读问题如何彻底解决幻读?小结RR隔离级别在MySQL中,RR代表Repeatable Read,也就是可重复读。这是事务隔离级别中的一个,它的特点是确保在同一个事务中,多次读取同一条记录的结果都是一致的。这也是MySQL默认的事务隔离级别。MVCCMVCC是一种并发控制机制,用于在数据库系统中处理并发读写操作时保持数据的一致性和隔离性。它通过保存数据的多个            
                
         
            
            
            
            最近消息看到一篇关于幻读解读不错的文章,分享学习下。  
 所谓幻读,即一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的行,这个回答估计大伙儿已经背烂了,但是它具体有什么后果呢?为什么会被 MySQL 单独拎出来解决呢?MySQL 又是如何解决的呢?
   当前读和快照读在了解幻读以及 MySQL 是如何解决幻读这个问题前,我们需要知道,什么是当前读、什么是快照读。快照            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-28 11:22:44
                            
                                101阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            # 理解 MySQL 的 MVCC 机制和读视图实现多表读取
## 前言
在 MySQL 中,MVCC(Multi-Version Concurrency Control)是一个重要的特性,用于提高数据库的并发性能。MVCC 允许多个事务同时读取数据而不互相阻塞。这篇文章将教你如何实现 MySQL 的 MVCC 机制,特别是如何在读视图中读取多个表。
## 整体流程
在实现 MVCC 的过            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-10-25 04:50:38
                            
                                66阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、当前读当前读,会对读取的记录加锁,保证其他并发事务不会修改当前记录,读取的是记录的最新版本简单来说,当前读就是加了锁的增删改查语句,不管上的共享锁还是排他锁,均为当前读相关 SQL:select ... lock in share mode、select ... for update、update、delete、insert实现方式行锁是对单行记录上的锁行锁 + Gap 锁的组合称为 next            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-31 13:55:06
                            
                                264阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、什么是幻读1.我们先来回顾一下MySQL中事务隔离级别READ UNCOMMITTED :未提交读。READ COMMITTED :已提交读。REPEATABLE READ :可重复读。SERIALIZABLE :可串行化。2.针对不同的隔离级别,并发事务可以发生不同严重程度的问题READ UNCOMMITTED 隔离级别下,可能发生脏读、不可重复读和幻读问题。READ COMMITTED 隔            
                
         
            
            
            
            快照读  读取的是记录数据的可见版本(可能是过期的数据),不用加锁当前读  读取的是记录数据的最新版本,并且当前读返回的记录都会加上锁,保证其他事务不会再并发的修改这条记录刚看的人可能觉得比较难懂,直接举实例来解释,首先准备工作先做好:快照读:select (不加锁)当前读:select……lock in share mod(加共享锁,又称S锁),select……for update(加            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-01-13 19:31:31
                            
                                147阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            在我们的数据库隔离级别中幻读的解决是在串行化的级别下进行处理的,虽然这种方法可以解决幻读,但是这种方法在高并发下效率是非常低的,经过学习了解到两种解决幻读的方法:加间隙锁和MVCC。加间隙锁间隙锁:将数据分为不同区间,对该区间进行加锁。作用在索引上,其目的是为了防止同一事物的两次当前读出现幻读的情况。如果对一条记录添加了间隙锁,并不会影响其他事务对这条记录加记录锁或者继续加gap锁。 比如说我们有            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-16 02:13:51
                            
                                152阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            # 实现 MySQL 读已提交当前读的步骤
在本篇文章中,我们将深入探讨如何使用 MySQL 数据库实现“读已提交(Read Committed)当前读”。我们将按步骤分解这个过程,同时在每一步中提供需要的代码及详细注释。最后,我们会总结一下这个过程的要点。
## 程序流程概述
在进行“读已提交”当前读之前,让我们先看一下整体流程。如下是实现此过程的主要步骤:
| 步骤   | 描述