数据库事务中删除了数据还能查到

本文探讨了在MySQL的MVCC机制下,不同隔离级别(如RR和RC)如何影响数据的访问。在RR隔离级别中,事务启动时创建一致性视图,只能查看在快照读前已提交的数据;而在RC隔离级别下,每个SQL语句执行时都会创建视图,查看在语句启动前已提交的数据。事务中判断数据是否可见涉及低水位和高水位线的判断。文章通过实例解释了为何在事务中删除数据后仍能通过快照读查到的情况,并提出了解决并发操作问题的建议。
摘要由CSDN通过智能技术生成

问题: 有开发问到,为啥我在一个事务中删除数据没有报错,还能select查到呢? 其实这是隔离级别的原因,不同隔离级别带来的表现是不同的,下面主要给大家介绍下RC和RR隔离级别的一些原理

本文主要介绍RR和RC在事务中如何访问数据的,导语中的这个问题我们在最后会说明原因

首先大家需要先了解一个视图的概念,这个视图并不是指view这种虚拟表,而是指innodb在实现MVCC时用到的一致性读视图,即consistent read view,用于实现RC和RR隔离级别的实现

RR和RC隔离级别下什么时候会产生这个视图呢?

  • RR:事务启动时创建的
    1. 这里需要注意,如果是用begin或者start transaction的方式启动事务的话,需要在执行第一个操作innodb表的语句才会创建这个视图
    2. start transaction with consistent snapshot会直接创建这个一致性视图
  • RC:每个SQL语句开始执行的时候创建的

MVCC中不同隔离级别如何访问数据的

RR和RC隔离级别的区别,先说结论:

  • RR:
    1、针对查询:快照读,以建立的一致性视图为主,只能查看在一致性快照前就已经提交完成的数据
    2、针对变更:先进行当前读在进行变更,每次变更的都是最新的数据
  • RC:
    1、所有都是当前读:只能查看在语句启动前就已经提交完成的数据

怎么判断具体哪些数据是可以访问的呢?这里我们需要了解一下在事务中访问数据时都做了什么操作

  1. innodb 里
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值