InnoDB 存储引擎在 REPEATABLE-READ(可重 读)隔离级别下怎么保证不会发生幻读
时间: 2023-05-30 09:02:01 浏览: 78
InnoDB 存储引擎在 REPEATABLE-READ 隔离级别下通过多版本并发控制(MVCC)机制来保证不会发生幻读。
具体来说,当一个事务开始时,InnoDB 会为该事务创建一个视图(View),该视图包含当前时间点数据库中所有正在进行的事务对应的快照。在该事务中,所有 SELECT 操作都会使用该事务的视图来读取数据。因此,即使其他事务在该事务执行 SELECT 操作期间插入或删除了数据,该事务也只会看到它开始时的数据。
当一个事务进行 INSERT、UPDATE 或 DELETE 操作时,InnoDB 会为该操作创建一个新版本的数据,而不是直接在原始数据上进行修改。这样,其他事务仍然可以使用它们自己的视图来读取原始数据,而不会受到该事务的影响。
因此,在 REPEATABLE-READ 隔离级别下,InnoDB 通过 MVCC 机制来保证每个事务读取的数据都是一致的,而不会受到其他事务的干扰,从而避免了幻读的发生。
相关问题
innodb隔离级别
InnoDB是MySQL数据库的一种存储引擎,它遵循了SQL:1992标准中的四种事务隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。其中,InnoDB默认使用的隔离级别是REPEATABLE READ,也就是可重复读级别。在这个级别下,事务可以保证读取的数据是一致的,即使其他事务对数据进行了修改。它通过在事务执行期间保持一致的快照来实现。这种隔离级别可以很好地保证事务的并发性和顺序读隔离性。关于SERIALIZABLE隔离级别,它在InnoDB中也是可用的,但不建议使用,因为它会导致读写冲突,从而降低并发度。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [InnoDb事务隔离级别](https://blog.csdn.net/weixin_42203131/article/details/130526143)[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: 50%"]
- *3* [InnoDB的几种事务隔离级别](https://blog.csdn.net/limingqiang007/article/details/122929975)[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: 50%"]
[ .reference_list ]
innodb四种事务隔离级别
InnoDB存储引擎是MySQL的默认事务引擎,它支持以下四种事务隔离级别:
1. 读未提交(Read Uncommitted):最低的隔离级别,事务中的修改会立即对其他事务可见,可能会导致脏读、不可重复读和幻读问题。
2. 读已提交(Read Committed):默认隔离级别,事务提交后对其他事务可见,解决了脏读问题,但仍可能出现不可重复读和幻读问题。
3. 可重复读(Repeatable Read):保证同一事务中多次读取相同数据结果一致,解决了不可重复读问题。其他事务对该数据的修改只有在当前事务提交后才可见,但仍可能出现幻读问题。
4. 串行化(Serializable):最高的隔离级别,通过强制事务串行执行来避免脏读、不可重复读和幻读问题。确保了数据的完全一致性,但也导致了并发性能的降低。
每个隔离级别都有其适用的场景和权衡考虑。较低的隔离级别可以提高并发性能,但可能会引入数据不一致的问题;较高的隔离级别可以保证数据的一致性,但会降低并发性能。选择适当的隔离级别需要根据具体业务需求和数据一致性要求进行权衡。