这里我依旧是浅谈,脏读很好解释,就是B读取了A还没有提交的事务。
但是为什么会产生脏读?这里就得是事务的隔离性那些,但是我这里不说这个,我从存储方面说说,数据库的数据存在磁盘中,当你读取数据时,这一小部分数据就会复制到一个缓冲区(也就是内存) 中,读取数据的时候会先去内存中寻找,如果没有再去磁盘中寻找,然后脏读的原因也在这里,B读取了 内存中的一条数据,(然后要对他进行修改,只要他执行了修改,内存中的数据就改变了,之后提交事务后就会被持久化到数据库,否则就回滚了),也恰恰是这个时候,A来读取了同一条数据,肯定也是从内存中读取的 ,但是读取的是被B修改过的数据,但是这个时候B这个事务有异常了,回滚了,数据没有持久化到磁盘,没有发生变化,但是A刚才读了B没有持久化的数据,也就是错误的数据,这就是我理解的脏读。