mvcc怎么解决幻读
时间: 2023-10-22 11:24:27 浏览: 93
MVCC(Multi-Version Concurrency Control)是一种用于解决并发事务中幻读的机制。在MVCC中,每个事务都有一个唯一的事务ID和时间戳。当一个事务开始时,它会创建一个事务快照,该快照包含了在该事务开始之前的数据库状态。如果其他事务在这个事务快照创建后进行了修改,那么这些修改将在事务快照中不可见。
具体来说,MVCC通过保存数据的旧版本来实现。当一个事务开始时,它只能看到在该事务开始之前已经提交的其他事务的修改。如果在事务的执行过程中有新的事务提交了修改,那么这些新的修改对于当前事务是不可见的。
因此,MVCC可以解决幻读问题。幻读是指在同一个事务中,当多次执行相同的查询时,可能会得到不同的结果集,因为其他事务已经插入或删除了符合查询条件的数据。通过MVCC的机制,事务在开始时就创建了一个快照,这个快照包含了在事务开始之前的数据库状态。因此,在整个事务的执行过程中,事务只能看到在事务开始之前已经提交的其他事务的修改,而无法看到其他事务的插入或删除操作。
总之,MVCC通过保存旧版本的数据来防止幻读的发生。每个事务在开始时都会创建一个事务快照,该快照包含了在事务开始之前已经提交的其他事务的修改。这样,事务在执行过程中只能看到在事务开始之前已经提交的数据,从而避免了幻读的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [mysql MVCC产生幻读原因及解决方式](https://blog.csdn.net/weixin_44145478/article/details/119910868)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [详解MySQL是如何解决幻读的](https://download.csdn.net/download/weixin_38730767/13699659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [一文搞懂MySQL的MVCC原理及如何解决幻读](https://blog.csdn.net/weixin_43477531/article/details/121963884)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
阅读全文