`
xvm03
  • 浏览: 144315 次
  • 来自: ...
社区版块
存档分类
最新评论

数据库---多事务并发访问问题 --ZT

阅读更多

数据库---多事务并发访问问题(脏读...)

(2009-05-08 21:39:35)
标签:

it

分类:hibernate理解

数据库带来的并发问题包括:   

   1.丢失或覆盖更新。(幻像读)

   2.未确认的相关性(脏读)。

   3.不一致的分析(非重复读)。

详细描述如下:

一,丢失更新

  当多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。  

 当事务A和事务B同时修改某行的值,

 1.事务A将数值改为1并提交

 2.事务B将数值改为2并提交。这时数据的值为2,事务A所做的更新将会丢失。

解决办法:对行加锁,只允许并发一个更新事务。(hibernate中的悲观锁,乐观锁)

二,未确认的相关性(脏读)

  当第二个事务选择其它事务正在更新的行时,会发生未确认的相关性问题。第二个事务正在读取的数据还没有确认并且可能由更新此行的事务所更改。

  1.Mary的原工资为1000, 财务人员将Mary的工资改为了8000(但未提交事务)       

  2.Mary读取自己的工资 ,发现自己的工资变为了8000,欢天喜地!(在缓存中读取)

  3.而财务发现操作有误,回滚了事务,Mary的工资又变为了1000 像这样,Mary记取的工资数8000是一个脏数据。

 解决办法:如果在第一个事务提交前,任何其他事务不可读取其修改过的值,则可  以避免该问题。

三,不一致的分析(非重复读)

  当第二个事务多次访问同一行而且每次读取不同的数据时,会发生不一致的分析问题。不一致的分析与未确认的相关性类似,因为其它事务也是正在更改第二个事务正在读取的数据。然而,在不一致的分析中,第二个事务读取的数据是由已进行了更改的事务提交的。而且,不一致的分析涉及多次(两次或更多)读取同一行,而且每次信息都由其它事务更改;因而该行被非重复读取。

 

 在一个事务中前后两次读取的结果并不致,导致了不可重复读。

  1.在事务1中,Mary 读取了自己的工资为1000,操作并没有完成

  2.在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务.

  3.在事务1中,Mary 再次读取自己的工资时,工资变为了2000

 

解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。

 

 四.幻像读     

  当对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,会发生幻像读问题。事务第一次读的行范围显示出其中一行已不复存在于第二次读或后续读中,因为该行已被其它事务删除。同样,由于其它事务的插入操作,事务的第二次或后续读显示有一行已不存在于原始读中。

 

目前工资为1000的员工有10人。

  1.事务1,读取所有工资为1000的员工。

  2.这时事务2向employee表插入了一条员工记录,工资也为1000

  3.事务1再次读取所有工资为1000的员工共读取到了11条记录,

 

解决办法:如果在操作事务完成数据处理之前,任何其他事务都不可以添加新数据,则可避免该问题

分享到:
评论

相关推荐

    OceanBase-数据库-V4.1.0.zip

    OceanBase是一款由中国阿里巴巴集团自主研发的分布式数据库系统,它在高并发、大规模数据处理方面表现出色,尤其适合大型互联网企业和金融行业的核心业务场景。在OceanBase 4.1.0版本中,一系列增强的功能和优化的...

    数据库系统概论---第十一章并发控制.ppt

    并发控制是为了确保在多用户环境下,多个事务同时访问数据库时不会破坏数据的一致性和完整性。在数据库系统中,尤其是在多用户共享的环境中,如飞机定票系统或银行数据库系统,允许并发事务执行可以提高系统的效率和...

    大学 数据库 实验 报告 数据库原理实验

    - 创建名为Mydata的数据库,包含主、次数据文件和事务日志文件,设定各文件的容量和增长规则。 2. 数据库创建(SQL语句): - 使用CREATE DATABASE语句创建名为SA的数据库,设定文件逻辑名、物理名、初始容量、...

    数据库5-1 事务处理技术-并发控制1

    并发控制是数据库管理系统中至关重要的一个环节,它的主要目标是确保在多用户环境下,多个事务同时执行时,数据的一致性和完整性不会受到破坏。当多个事务并发运行时,如果没有适当的控制,可能会导致数据不一致、...

    数据库-常见问题分析.pdf

    事务的ACID属性(原子性、一致性、隔离性和持久性)是确保数据一致性的基础,通过锁机制、乐观锁和多版本并发控制(MVCC)等方法实现。 - 死锁:当两个或更多事务相互等待对方释放资源时,会出现死锁。数据库管理...

    多用户远程访问Access数据库--通讯录示例(VB+ASP+ACCE)

    本示例"多用户远程访问Access数据库--通讯录示例(VB+ASP+ACCE)"展示了一个多用户可以同时操作的远程数据库系统,这突破了Access数据库通常只在局域网内使用的局限。以下将详细解释这个系统的组成部分和相关技术知识...

    论文研究 - 键值NoSQL数据库的冲浪并发事务处理模型

    本文提出了一个包含Redis的键值NoSQL数据库的事务模型,以使用户能够以ACID(原子性,一致性,隔离性和持久性)方式访问数据,该模型被生动地称为冲浪并发事务模型。 详细描述了体系结构,重要功能和实现原理。 还...

    面试真题包含spring-java-集合-框架-并发-spring-运维-数据库等多领域45卷合集.rar

    这份名为"面试真题包含spring-java-集合-框架-并发-spring-运维-数据库等多领域45卷合集.rar"的压缩包是为准备Java相关面试的求职者精心整理的资源库。它包含了45套涵盖多个领域的面试题,旨在帮助求职者全面复习和...

    MySQL数据库-事务、锁及SQL优化

    2. **数据库锁**:用于在多用户环境中控制对数据的并发访问。 - **行锁**:包括共享锁(S)和排他锁(X),以及记录锁、间隙锁、Next-Key Lock和插入意向锁。例如,`SELECT ... FOR SHARE/UPDATE` 可以在查询时添加共享...

    数据库-并发控制

    并发控制,数据库的相关知识,绝对有用,大家好好看看

    数据库-萨师煊(原版)

    7. **并发控制**:在多用户环境下,同时处理多个事务的机制,如封锁、乐观锁和多版本并发控制(MVCC),以防止数据不一致。 8. **故障恢复**:通过日志记录、检查点和回滚等技术,确保系统在发生故障后能恢复到一致...

    数据库并发控制的基本方法

    在数据库系统中,**并发控制**是一项关键的技术,用于确保多个事务能够同时访问数据而不引起数据不一致的问题。并发控制的目标是使得多个事务的并发执行看起来像是按照某种顺序(通常是串行)依次执行一样。这种控制...

    数据库-基础知识点学习(软考)

    数据库基础知识点学习是数据库管理系统(DBMS)的核心组成部分,涉及到数据库设计、关系数据库规范化、事务管理、数据库安全、数据库管理系统、数据独立性、事务并发控制、分布式数据库等多方面的知识点。...

    数据库-丢失更新测试

    在数据库管理系统中,丢失更新是一个常见的并发控制问题,它发生在多用户环境中,当两个或更多的事务对同一数据进行修改时,可能导致一个事务的更新被其他事务的更新覆盖,从而丢失了某些更新。这个问题在数据库理论...

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

    为了解决上述事务并发问题,数据库提供了不同的事务隔离级别: 1. **读未提交(Read Uncommitted)**: - 描述:最低级别的隔离,允许读取未提交的更改,可能会遇到脏读、不可重复读和幻读等问题。 - 示例:如果...

    数据库的并发控制

    数据库并发控制是指在多用户环境下,当多个事务试图同时访问或修改同一数据时,数据库管理系统采取措施确保所有事务正确执行的过程。并发控制机制是衡量数据库管理系统性能的一个重要指标。如果没有适当的并发控制,...

    数据库-简答题整理.docx

    - 隔离性(Isolation):并发事务之间不会互相影响,每个事务仿佛是独占资源执行的。 - 持久性(Durability):一旦事务提交,其影响将是永久的,即使系统崩溃也能恢复。 2. **完整性约束**: - 实体完整性:每...

Global site tag (gtag.js) - Google Analytics