`

两种事务丢失更新

 
阅读更多

第一类丢失更新 

    A事务撤销时,把已经提交的B事务的更新数据覆盖了。这种错误可能造成很严重的问题,通过下面的账户取款转账就可以看出来:

 

 

时间

取款事务A

转账事务B

T1

开始事务

 

T2

 

开始事务

T3

查询账户余额为1000元    

 

T4

 

查询账户余额为1000元

T5

 

汇入100元把余额改为1100元

T6

 

提交事务

T7

取出100元把余额改为900元

 

T8

撤销事务

 

T9

余额恢复为1000 元(丢失更新)

 

   

 

 

A事务在撤销时,“不小心”将B事务已经转入账户的金额给抹去了。 

    第二类丢失更新 

A事务覆盖B事务已经提交的数据,造成B事务所做操作丢失:   

时间

转账事务A

取款事务B

T1

 

开始事务

T2

开始事务

                         

T3

               

查询账户余额为1000元    

T4

查询账户余额为1000元

                         

T5

 

取出100元把余额改为900元

T6

 

提交事务           

T7

汇入100元

 

T8

提交事务

 

T9

把余额改为1100 元(丢失更新)

 

  

 

 

    上面的例子里由于支票转账事务覆盖了取款事务对存款余额所做的更新,导致银行最后损失了100元,相反如果转账事务先提交,那么用户账户将损失100元。

分享到:
评论

相关推荐

    day36 10-Hibernate中的事务:解决丢失更新

    在数据库管理中,事务是确保数据一致性的重要机制,而丢失更新是并发控制中可能出现的一种错误情况。 在数据库系统中,丢失更新是指两个或多个事务对同一数据进行修改,导致最终结果丢失了其中一个事务的更新。例如...

    数据库事务总结 数据库事务总结

    1. **丢失更新**: - 描述:两个或多个事务对同一数据进行修改时,导致其中一些事务的更新被其他事务覆盖。 - 示例:在两个并发的事务中,一个事务先修改了数据,但还未提交,另一个事务随后也对该数据进行了修改...

    48 多个事务并发更新以及查询数据,为什么会有脏写和脏读的问题?l.pdf

    在SQL标准中,定义了四种事务隔离级别: 1. 读未提交(Read Uncommitted):最低的隔离级别,允许事务读取未提交更改的数据,这意味着可能会遇到脏读、不可重复读和幻读问题。 2. 读已提交(Read Committed):保证...

    JDBC事务管理.docx

    1. 丢失更新:当两个事务同时更新同一数据,后执行的事务可能会覆盖先执行事务的更新,导致数据丢失。 2. 脏读:一个事务读取了另一个未提交的事务修改的数据,可能导致读取到不准确的信息。 3. 不一致的分析(非...

    分布式数据库和事务处理06

    更新丢失是指一个事务的更新被另一个事务的更新覆盖,导致原始事务的修改丢失。例如,事务T1先将X的值减去30,然后事务T2再将X的值乘以2,如果T1的更新未被提交,那么T2的更新就会覆盖T1的更新,T1的修改就丢失了。 ...

    MySQL事务表和非事务表的区别1

    MySQL 事务表与非事务表是数据库管理中的两种基本类型,它们主要的区别在于对数据一致性和安全性提供的保障程度。在MySQL中,这两种类型的表在处理数据操作时有不同的机制。 首先,事务表,如InnoDB存储引擎提供的...

    深入理解分布式事务

    分布式事务是指在分布式系统中,为了确保跨多个节点上的操作能够正确地完成或者全部回滚,所采取的一种事务处理机制。在这样的场景下,事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的...

    轻轻松松掌握ADO.NET事务处理方法技巧

    例如,有两个表,一个是支出表,一个是余额表,当支出一项费用时,支出费用增加,余额减少,需要对这两个表同时更新,但如果不用事务,倘若在更新支出表后发生错误,则余额表没有更新,不合要求。这时就要把它们封存...

    事务与锁定的问题 自治事务

    - **更新丢失**:两个事务同时修改同一数据,后提交的事务覆盖了前者的修改。 - **不可重复读**:同一事务内多次读取同一数据,由于其他事务的修改,导致读取结果不一致。 - **脏读**:一个事务读取了另一个未提交...

    Java书籍\事务

    在多用户并发访问数据库的场景下,事务的正确管理变得尤为重要,因为多个事务之间的交互可能会引发一系列问题,如丢失更新、脏读、重复读、第二类丢失更新以及虚读等。 ### 失踪更新(Lost Update) 失踪更新主要...

    数据库中事务和锁.ppt

    为解决这些问题,数据库系统通常采用两种主要方法:锁定和事务的隔离级别。锁定机制通过加锁来强制事务的串行化,而事务的隔离级别(如读未提交、读已提交、可重复读和串行化)则在一定程度上允许并发,同时限制特定...

    oracle事务.pptx

    丢失更新发生于两个事务同时更新同一数据时,其中一个事务的更新可能会被另一个事务覆盖,导致数据丢失。例如,两个事务分别进行库存增减操作,如果不加以控制,可能导致最终库存计算错误。脏读则是指一个事务读取到...

    c# 事务即同时实现两个修改

    在C#编程中,事务(Transaction)是一种保证数据一致性的重要机制。它允许开发者在同一操作中同时执行多个数据库或资源管理器的修改,并确保这些修改要么全部成功,要么全部回滚,从而避免了部分操作成功而部分失败...

    SQL Server事务基本使用方法

    1. **丢失更新**:当两个事务同时修改同一行数据,后提交的事务会覆盖先提交事务的修改,导致数据丢失。 2. **脏读**(Dirty Read):一个事务读取了另一个事务尚未提交的数据,如果后者回滚,则前者读取的数据就是...

    事务处理--介绍事务原理和事务实现.docx

    - **XA**:一种两阶段提交协议,允许跨不同数据库和资源管理器的分布式事务。 - **2PC(Two-Phase Commit)**:最常见的分布式事务协议,分为准备阶段和提交阶段。 - **XA与2PC协议**:两者都用于分布式事务,但2...

    WebSphere MQ与Oracle 数据库的XA事务(两阶段提交)实现

    XA事务是一种两阶段提交(Two-Phase Commit, 2PC)协议,广泛应用于多资源协调的分布式系统中。 首先,让我们了解一下MQ独立事务。在WebSphere MQ中,每个消息发送或接收操作都可以作为一个事务进行。这意味着如果...

    java事务 - 使用注解

    Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。声明式事务管理通过注解或XML配置实现,更易于维护,因此在实际开发中更为常见。`@Transactional`注解就是声明式事务管理的核心。 **3. @...

    软考系分之数据库事务并发与事务加锁

    封锁分为两种类型: 1. **排它锁(Exclusive Lock,简称X锁)**:也称为写锁。当事务T对数据D加了X锁之后,其他任何事务都不能再对D加任何类型的锁,直到T释放D上的锁为止。这确保了只有持有X锁的事务可以对数据...

Global site tag (gtag.js) - Google Analytics