码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-05-27 18:04:06      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:事务   UNC   不可重复读   ted   完全   资源   行记录   重复   多次   

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

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

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

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

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

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

 

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

 

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

标签:事务   UNC   不可重复读   ted   完全   资源   行记录   重复   多次   

原文地址:https://www.cnblogs.com/yangyijun/p/9096711.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!