关于数据库事务中脏读不可重复读和幻读的理解

Posted yangyijun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于数据库事务中脏读不可重复读和幻读的理解相关的知识,希望对你有一定的参考价值。

数据库有四种隔离级别,分别是:

SOLATION_READ_UNCOMMITTED:允许读取改变了的还未提交的数据,可能导致脏读、不可重复读和幻读。 
ISOLATION_READ COMMITTED:允许并发事务提交之后读取,可以避免脏读,可能导致重复读和幻读。 
ISOLATION_REPEATABLE_READ:对相同字段的多次读取结果一致,可导致幻读。 
ISOLATION_SERIALIZABLE:完全服从ACID的原则,确保不发生脏读、不可重复读和幻读。 

四种不同的隔离级别代表着数据库对资源锁的粒度。

脏读:说明数据库事务在修改一条记录的时候,没有增加排他锁,导致其他事务可以进行查询。

不可重复读:说明事务在修改数据库记录的时候对一行记录增加了排他锁,导致其他事务不能查询和更新,但一个事务完成前没有对查询的记录加排他锁,一个事务中若两次查询同一记录,两次查询之间,其他事务可能会更改当前记录,解决方法是一个事务没有完成前,锁定查询的记录,不允许其他事务修改。

幻读:与脏读类似,但锁定的资源粒度不同,脏读是同一事务两次查询同一记录,返回不同结果;而幻读是按条件查询一个范围的数据,如select * from users where id   <=20, 第一次查询是20条记录,第二次查询19条记录,一个事务中两次查询之间,其他事务删除了一条记录,导致两次查询结果不同。幻读应该是需要锁表才能避免,即锁定一个事务查询过程中所有表,不能更新。

 

--以上是个人理解,若有错误,望指正。

 

以上是关于关于数据库事务中脏读不可重复读和幻读的理解的主要内容,如果未能解决你的问题,请参考以下文章

什么是脏读,不可重复读,幻读

通过王者来帮你理解脏读不可重复读和幻读

SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因

不可重复读和幻读的区别

数据库的脏读不可重复读和幻读区别

数据库的脏读不可重复读和幻读区别