脏读会引起什么问题

阅读 38

2022-01-07

脏读会引起什么问题

引言

在事务的隔离级别中我们会看到四种事务隔离级别(读未提交,读已提交,可重复读,串行化),和在不同隔离级别下会产生的问题,其中第一个问题就是再读未提交下会产生脏读的情况。那究竟什么是脏读?而脏读又回引起什么问题呢?

什么是脏读

首先有两个背景要说明一下

假设两个不同的线程分别有两个不同的事务A和B,他们按照下面的时序来执行,假设初始值为0。那么,在B1读数据阶段就会读到200的值。这就是脏读,在A2提交步骤执行前,其他线程的事务读到了它要修改的值。

会引起什么问题

那这会有什么问题呢?200本来不就是要提交的吗?问题就在于事务提交可能失败,失败以后会回滚。还按照上面的图来说明问题,在隔离级别为读未提交的情况下,AB两个事务正常执行完以后值应该是300。可是假设A事务执行过程中产生异常回滚了,我们期望的值其实应该是100。但是不好意思,因为在B1步骤已经读到值为200,然后再加100,那结果值就只能是300了。

精彩评论(0)

0 0 举报