数据库读现象

Posted givenchy_yzl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库读现象相关的知识,希望对你有一定的参考价值。

数据库读现象

数据库读现象,在数据库管理机制的干扰下,很可能不存在,但我们还是要了解,防止出现下列问题是不知道如何处理,数据库读现象是在高并发的同时,进行写行为,出现的

脏读
1.读到无效的数据,就是事务一更新了一个数据(未提交),此时事务二查询了这个数据(读到的是未提交的数据),同时事务一将数据回滚(rollback),此时事务二读到的就是脏数据(不真实的数据)
2.事务一读到数据,此时事务二插入了一条数据,那么此时事务一读到的数据就是不真实的数据(脏数据),即为脏读

不可重复读
事务T1读取一行记录,紧接着事务T2修改了T1刚才读取的那一行记录并且提交了。然后T1又再次读取这行记录,发现与刚才读取的结果不同。这就称为“不可重复”读,因为T1原来读取的那行记录已经发生了变化。

幻读
事务T1读取或修改了指定的WHERE子句所返回的结果集。然后事务T2新插入一行记录,这行记录恰好可以满足T1所使用的查询条件中的WHERE 子句的条件。然后T1又使用相同的查询再次对表进行检索,但是此时却看到了事务T2刚才插入的新行或者发现了处于WHERE子句范围内,但却未曾修改过的记录。像是出现幻觉了一样

解决方案

其实,脏写、脏读、不可重复读、幻读,都是因为业务系统会多线程并发执行,每个线程可能都会开启一个事务,每个事务都会执行增删改查操作。然后数据库会并发执行多个事务,多个事务可能会并发地对缓存页里的同一批数据进行增删改查操作,于是这个并发增删改查同一批数据的问题,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。

所以这些问题的本质,都是数据库的多事务并发问题,那么为了解决多事务并发带来的脏读、不可重复读、幻读等读等问题,数据库才设计了锁机制、事务隔离机制、MVCC 多版本隔离机制,用一整套机制来解决多事务并发问题

以上是关于数据库读现象的主要内容,如果未能解决你的问题,请参考以下文章

数据库的读现象

数据库的读现象浅析

[数据库事务与锁]详解二: 数据库的读现象浅析

[数据库事务与锁]详解二: 数据库的读现象浅析

数据库隔离 脏读 幻读与不可重复读

深入解析Mysql中事务的四大隔离级别及其所解决的读现象