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

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

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

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

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

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

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

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

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

时间: 2024-11-13 08:13:27

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

[MySQL]对于事务并发处理带来的问题,脏读、不可重复读、幻读的理解与数据库事务隔离级别 - 分析脏读 &amp; 不可重复读 &amp; 幻读

刚开始写博客.. 写的太low. 1.数据库的两种读,每种读读的数据版本不一样,所以也称为MVCC,即多版本并发控制 a) 快照读 select * from where xxx  这种形式的都是快照读. b) 当前读 update , insert ,delete ,select xx from xx for update ,  in share mode 都是当前读 当前读会等待,不会返回数据的历史版本 2.mvcc 的实现原理 mvcc是基于read view.活跃事务列表 做的,以后的文

数据库事务隔离级别、脏读、重复读、不可重复读、幻读

数据库事务四种隔离级别 1.Read Uncommitted(读未提交) :事务中的修改,即使没有提交,其他事务也可以看得到,会导致“脏读”.“幻读”和“不可重复读取”. 2.READ COMMITTED (读提交):大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”,但不能避免“幻读”和“不可重复读取”.该级别适用于大多数系统. 3.REPEATABLE READ(可重复读) :保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的

MySQL InnoDB四个事务级别 与 脏读、不重复读、幻读

MySQL InnoDB事务隔离级别脏读.可重复读.幻读 希望通过本文,可以加深读者对ySQL InnoDB的四个事务隔离级别,以及脏读.不重复读.幻读的理解. MySQL InnoDB事务的隔离级别有四级,默认是"可重复读"(REPEATABLE READ). ·        未提交读(READUNCOMMITTED).另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读). ·        提交读(READCOMMITTED).本事务读取到的

了解数据库中脏读+不可重复读+幻影读

"读现象"是多个事务并发执行时,在读取数据方面可能碰到的状况.先了解它们有助于理解各隔离级别的含义.其中包括脏读.不可重复读和幻读. 脏读: 脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的. 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交(commit)到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据.因为这个数据是还没有提交

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

原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中的事务概念,ACID 原则,事务中常见的问题,问题造成的原因和事务隔离级别等这些方面的知识好好的整理了一下. 其实有关 SQL Server 中的事务,说实话因为内容太多, 话题太广,稍微力度控制不好就超过了我目前知识能力范围,就不是三言两语能够讲清楚的.所以希望大家能够指出其中总结的不足之处,对我

Hibernate中的事务隔离问题(脏读、不可重复读、幻读)

Hibernate中的事务隔离问题(脏读.不可重复读.幻读) 1.事务的特性 事务的四个特性: 1)原子性:事务是进行数据库操作的最小单位,所以组成事务的各种操作是不可分割的 2)一致性:组成事务的各种操作,要么全部成功,要么全部失败.其中有一个失败,事务无法完成 3)隔离性:在并发中,每个事务都是独立的 4)持久性:这是结果,表示在事务提交之后,数据将持久的保存到数据库 2.事务的隔离问题 事务的三个隔离问题: 1)脏读:一个事务读到了另一个事务还没提交的数据 如:A事务正在读一个数据a,但是

数据库的脏读、不可重复读、幻读

文章来源:http://www.bkjia.com/sjkjc/806530.html 数据库的脏读.不可重复读.幻读都和事务的隔离性有关.所以先了解一下事务的4大特性. 事务的4大特性(ACID): 原子性(Atomicity):事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行. 一致性(Consistemcy):事务前后,数据库的状态都满足所有的完整性约束. 隔离性(Isolation):并发执行的N个事务是隔离的,一个不影响一个,一个事务在没有commit之前,被修

事务隔离级别、脏读、不可重复读、幻读

事务隔离级别.脏读.不可重复读.幻读 网络上关于这方面的博文有些偏理论,有些通篇代码,都不能深入浅出.本文用图文并茂的方式,配上行云流水般的代码,非要摆清楚这个问题.相关代码已提交至码云(点击这里下载). 事务是现代关系型数据库的核心之一.在多个事务并发操作数据库(多线程.网络并发等)的时候,如果没有有效的避免机制,就会出现以下几种问题: 第一类丢失更新(Lost Update) 在完全未隔离事务的情况下,两个事务更新同一条数据资源,某一事务完成,另一事务异常终止,回滚造成第一个完成的更新也同时

事务隔离级别中可重复读与幻读

前言 中秋刚过,大家是不是还没充中秋的假日里缓过来?三天假期里,我深入窥探了Innodb中可重复读与幻读,非常有意思,分享给大家,作为大家工作前的开胃小菜,希望有所帮助. 每次谈到数据库的事务隔离级别,大家一定会看到这张表. 其中,可重复读这个隔离级别,有效地防止了脏读和不可重复读,但仍然可能发生幻读,可能发生幻读就表示可重复读这个隔离级别防不住幻读吗? 我不管从数据库方面的教科书还是一些网络教程上,经常看到RR级别是可以重复读的,但是无法解决幻读,只有可串行化(Serializable)才能解