`

脏读-不可重复读-幻影读

 
阅读更多

脏读,不可重复读,幻影读是数据库最常见、最基础的问题。

我参照 http://blog.csdn.net/alex197963/article/details/1580841 里的讲述,夹杂自己的实践写点。

 

前提:我说的是数据在隔离情况下,如何保证数据的可靠性,以及尽量保证数据库的性能。

 

 

 

事务场景 是这样的:
对于同一个银行帐户A内有200元,甲进行提款操作100元,乙进行转帐操作100元到B帐户。如果事务没有进行隔离可能会并发如下问题:

 

脏读---读取未提交的数据---Read uncommitted

要点:应用程序中,维护了不同的变量去同步数据库。

分析:既然是数据隔离,不会在同一事务。

      如果没有本地变量或缓存辅助,是不可能发生这种情况的,因为当前主流的数据库都是提交了之后,其他的访问才能知道。

      这个问题主要存在于应用程序中。举例,Hibernate的缓存可能会产生脏读。如,javabean修改但没有保存在数据库中时,操作的业务数据存在于内存中(Hibernate控制)。

      场景描述:数据库 银行帐户A内有200元。A读取时是200元(放在缓存里),取出100元(缓存中A账户的余额改为100元)。B要转账100元,如果余额在缓存中取,则缓存中的账户余额将变为0元。倘若A撤销刚才的取钱操作,账户将变为200元(如果以A查询出的200元为基础)。这样,A账户的最终金额将会是200或者0元,到底是谁,决定于谁提交,A提交账户是200,B提交账户将是0元(如果以B查询出的100元为基础)。但实际上应该为100元。

      解决方法:维护一个实例。

分享到:
评论

相关推荐

    脏读不可重复读幻影读

    ### 脏读、不可重复读与幻读详解 #### 一、概念解析 在数据库管理系统(DBMS)中,为了确保数据的一致性和完整性,引入了事务(Transaction)的概念。事务通常具备四个特性:原子性(Atomicity)、一致性(Consistency)、...

    .NET中 关于脏读 不可重复读与幻读的代码示例

    尤其是当多个事务并发执行时,可能会遇到一系列的问题,其中就包括脏读、不可重复读和幻读。理解这些问题并知道如何避免它们对于编写健壮的数据库应用程序至关重要。 首先,让我们定义一下这三种问题的含义: 1. ...

    java-数据库系统原理.docx

    并发一致性问题是多事务同时操作数据库时可能出现的问题,包括丢失修改、脏读、不可重复读和幻影读。丢失修改是指一个事务的更新被另一个事务的更新覆盖;脏读是事务读取到另一个事务未提交的修改,而这些修改可能...

    数据库原理及SQL Server-14.ppt

    通过加锁,系统可以防止脏读、不可重复读和幻读等并发问题: - 脏读:一个事务读取到了另一个事务未提交的修改数据。 - 不可重复读:同一事务中,多次读取同一数据,结果不同,因为其他事务在此期间对数据进行了...

    InnoDB,快照读,在RR和RC下有何差异

    MySQL的InnoDB存储引擎使用多版本并发控制(MVCC)机制来支持四种不同的事务隔离级别:读未提交(Read Uncommitted)、读已提交(Read Committed,简称RC)、可重复读(Repeatable Read,简称RR)和串行化...

    spring 事务

    - **`isolation_read_uncommitted`**:最低隔离级别,允许读取未提交的数据,可能导致脏读、幻读和不可重复读。 - **`isolation_read_committed`**:允许读取已提交的数据,可以避免脏读,但仍然可能发生不可重复...

    学习J2EE事务并发控制策略总结.pdf

    4. 序列化(Serializable):最高隔离级别,完全避免脏读、不可重复读和幻影读,但会影响性能。 在实际应用中,通常会选择读取已提交或更低的隔离级别,以平衡性能和并发控制。如果选择序列化,虽然可以由数据库...

    深入理解spring的事务管理机制

    5. **ISOLATION_SERIALIZABLE**:最高隔离级别,完全避免脏读、不可重复读和幻读。 通过上述内容,我们可以看出Spring的事务管理机制是基于AOP和底层数据库支持的,它极大地简化了事务处理的复杂度,并提供了灵活的...

    史上最全MySQL⾯试题及答案

    3. 脏读、不可重复读、幻读 脏读是指事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。不可重复读是指事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致...

    数据库的隔离级别介绍

    它主要解决了并发操作中可能出现的数据不一致性和并发问题,如更新丢失、脏读、不可重复读和虚读。以下是四种标准的事务隔离级别及其特点: 1. 未授权读取(Read Uncommitted): 这是最低的隔离级别,允许脏读取...

    ADO.NET实现并发控制

    常见并发并发一致性问题包括:丢失的修改、不可重复读、读脏数据、幻影读(幻影读在一些资料中往往与不可重复读归为一类)。

    聊聊MySQL事务的特性和隔离级别

    - 可串行化(Serializable):最严格的隔离级别,通过锁定事务,防止脏读、不可重复读和幻读,但可能导致较高的并发性能损失。 4. 持久性(Durability):一旦事务提交,其对数据库的更改将永久保存,即使系统故障...

    JDBC事务管理.docx

    3. 隔离性(Isolation):并发执行的事务互不影响,如同依次执行,防止了脏读、不可重复读和幻读等问题。 4. 持久性(Durability):一旦事务提交,其结果将永久保存,即使系统故障也能恢复。 在并发环境下,数据库...

    数据库加锁与性能分析

    并发操作带来的数据不一致性主要包括丢失修改、不可重复读和脏读。丢失修改是指两个事务对同一数据进行更新,其中一个事务的更新被另一个事务覆盖。例如在火车站售票系统中,两个订票员同时尝试预订同一个座位,可能...

    第11章并发控制09.ppt

    当多个事务同时存取同一数据时,如果不加以控制,可能会出现丢失修改、不可重复读和读脏数据这三种数据不一致性情况。这些不一致性破坏了事务的隔离性,导致事务执行的结果不符合预期。 1. 丢失修改:事务T1和T2都...

    Spring框架是在2003年兴起的一门轻量级的JAVAEE框架技术 Spring框架学习资料第四天

    2. 隔离性:包括脏读、不可重复读和幻影读三个概念。事务的隔离级别包括读未提交、读提交、可重复读和序列化读四种。 3. 回滚性:Spring默认在程序抛出运行时异常后,事务做回滚处理。默认抛出非运行时异常,事务做...

    SQLSERVER事务隔离级别的实验研究.pdf

    在可重复读隔离级别下,事务能够保证读取数据的可重复性,但不能防止幻影行的出现。而序列化隔离级别则通过使用键范围锁来防止幻影读,保证了事务执行期间数据不会发生变化。 本研究为中国工程物理研究院工学院的...

Global site tag (gtag.js) - Google Analytics