图示关系型数据库事务隔离级别可能存在的“数据一致性问题”

数据库的事务隔离级别其实是“可用性”“数据一致性”的一场博弈——隔离级别的程度越高,数据一致性做的越好,但可用性在降低。

事务的四种隔离级别.png

这里的“数据一致性”是指:在一个事务中,同一条sql查询语句,多次读取,所得数据没有变化(没有受到其他事务的干扰)。

下面我们用图示的方式来描述不同的事务隔离级别可能出现的“数据一致性”问题:

我们用一条水平线来代表时间轴,用两个长矩形来分别代表两个事务,其中矩形在时间轴上重叠的部分则代表其并行特征(当然,在实际使用中未必只有并行的两个事务,但两个事务足以说明问题)。
两个只读事务,不存在数据不一致的问题,不存在探讨价值;同样,两个只写事务,不存在对数据的使用过程,也不存在数据不一致的问题。

脏读与不可重复读
事务的并发场景.png

如上图,事务一将‘张三’的总额在原来的基础上增加10,事务二在事务一提交前后分别查询了一次‘张三’的总额;那下面用图示的方式解释会出现什么问题。


image.png
幻读
可重复读--事务场景演示.png

如上图,事务二中是不可能出现update和delete操作的,因为不可重复读的隔离级别会对事务一第一次读取到的数据加行锁,所有事务一时间范围内事务二的update和delete操作会处于锁等待状态,直到事务一执行完毕(当然,有可能因锁超时而被数据库放弃执行)。

如上图,事务一的两次读取结果也不同,实时上也是一种“不可重复读”,但与上文中提到的不可重复读有区别的地方在于--两次读取到的数据集合不再是同样的数据行记录;所以,习惯上称这种现象叫--幻读。

总结一下
不同事务隔离级别可能出现的数据一致性问题.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据类型 五种简单数据类型(基本数据类型):undefined、null、boolean、string、numbe...
    Rioo丶阅读 1,326评论 0 0
  • ————浙大MOOC《零基础Java》笔记 软件 运行和终止运行状态本图表示正在运行,看图中的红方框这个图中显示已...
    ermaoHa阅读 1,352评论 0 0
  • DON'T CALL IT A BLOOD MOON. OR SUPERMOON. OR BLUE MOON LA...
    新心断点阅读 1,807评论 0 0
  • DON'T CALL IT A BLOOD MOON. OR SUPERMOON. OR BLUE MOON LA...
    新心断点阅读 1,410评论 0 0
  • 雅思阅读真是特别耐读,值得反复回味。 剑4-test2-section1 1.Half the world's 6...
    z张文阅读 3,526评论 0 0