`
js_hum
  • 浏览: 17891 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

事务的原理

 
阅读更多

  事务 (Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transactionend transaction 语句(或函数调用)来界定。事务由事务开始(begin transaction )和事务结束(end transaction )之间执行的全体操作组成。

  例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。

      事务的理解,先要明白它的四种属性(特性):即ACID

  原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

  一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。   

  隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。   

  持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

  明白这四种属性,就差不多明白事务是什么回事了,也知道什么时候使用了。

 

事务并发处理会产生的问题 

丢失更新 

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

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

不可重复读 

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

幻像读 

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

分享到:
评论

相关推荐

    Spring事务原理、Spring事务配置的五种方式

    Spring事务原理和配置 Spring事务原理是指Spring框架中的一种机制,用于管理事务,并提供了多种配置方式。事务是指一系列的操作,作为一个整体执行,如果其中某个操作失败,整个事务将回滚。Spring事务原理围绕着两...

    第八讲-分布式事务原理及应用.pdf

    分布式事务原理及应用 在IT领域,事务是数据库操作的核心概念,它确保了数据的一致性和完整性。事务(Transaction)是一个程序执行单元,用于访问和可能更新数据库中的数据项。在关系数据库中,事务通常由一系列SQL...

    事务原理MVCC、Readview和行锁原理分析直播中(1).zip

    事务原理MVCC、Readview和行锁原理分析直播中(1).zip事务原理MVCC、Readview和行锁原理分析直播中(1).zip事务原理MVCC、Readview和行锁原理分析直播中(1).zip事务原理MVCC、Readview和行锁原理分析直播中(1).zip事务...

    C#数据库事务原理及实践

    总的来说,C#数据库事务原理及实践涉及了如何在.NET框架下使用C#操纵数据库事务,包括事务的开始、提交、回滚以及事务的ACID属性在实际操作中的应用。通过理解这些知识点,开发者能更好地保证数据库操作的安全性和...

    C#事务原理与实例

    【C#事务原理详解】 事务在C#编程中扮演着至关重要的角色,特别是在涉及数据库操作时,它确保了数据的一致性和完整性。事务是数据库管理系统(DBMS)中执行的一系列操作,这些操作要么全部成功,要么全部失败,遵循...

    分布式事务原理及解决方案.docx

    ### 分布式事务原理及解决方案 #### 1. 引言 随着信息技术的发展,特别是近年来微服务架构的兴起,分布式事务成为了企业级应用中的一个重要挑战。分布式事务涉及到多个不同的服务或资源之间的协同工作,需要保证在...

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

    本文将深入探讨事务的原理和实现方法。 1. **什么是事务** 事务是一系列数据库操作的逻辑单元,这些操作要么全部成功执行,要么全部不执行。在事务中,每个操作都是原子性的,即不可分割,要么全部完成,要么全部...

    Spring事务原理.txt

    Spring事务原理.txt

    深入理解Spring事务原理

    本文将深入探讨Spring事务原理,包括事务的基本概念、Spring事务的传播属性、数据库隔离级别以及事务的嵌套。 首先,事务的基本原理是基于数据库对事务的支持。在纯JDBC操作中,我们需要手动获取连接、开启和关闭...

    Spring注解驱动开发第35讲——声明式事务原理的源码分析

    Spring注解驱动开发第35讲——声明式事务原理的源码分析

    CSharp数据库事务原理及实践.rar_C#事务逻辑_c# ef 事务开发_c# 使用事务_c# 数据库事务_c#什么是事务

    本文将深入探讨C#语言中与数据库事务相关的原理及实践,包括事务的定义、特性、类型,以及如何在C#中利用Entity Framework(EF)进行事务开发和管理。 首先,我们需要理解什么是事务。在数据库系统中,事务是一组...

    Spring事务处理原理步骤详解

    Spring事务处理原理步骤详解是指在Spring框架中实现事务处理的整个过程,它涉及到事务处理的实现、事务处理原理和事务管理器的配置等几个方面。下面是Spring事务处理原理步骤详解的知识点总结: 一、事务处理实现 ...

    2023深度解读分布式事务Seata课-视频教程网盘链接提取码下载 .txt

    本课程将深入探讨分布式事务管理框架Seata的核心概念和实际应用。学员将了解Seata在微服务架构中的作用、原理及实践,包括分布式事务、一致性、可靠性等方面的重要知识点。 视频大小:16.6G

    springboot-transaction事务

    - 支持的事务传播行为:REQUIRED(默认,如果当前没有事务则新建,如果已有则加入)、REQUIRES_NEW(始终新建事务,即使外部有事务也要暂停)、SUPPORTS(如果已有事务则支持,否则不开启事务)、MANDATORY(如果已...

    java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip

    7. **分布式事务原理**: 分布式事务通常采用两阶段提交(2PC)、三阶段提交(3PC)或者更高级的补偿事务(Saga)等算法来协调跨多个节点的事务。Atomikos通过JTA接口实现了这些机制,使得应用程序无需关心底层实现,...

    分布式事务实践 解决数据一致性

    4-4 Jms事务原理 4-5 Jms-session事务实例 4-6 Jms-spring事务实例 4-7 外部事务与JTA 4-8 JTA单数据源事务实例 4-9 JTA多数据源事务实例 第5章 分布式系统 介绍了分布式系统的定义、实现原则和几种形式,详细介绍...

    Spring 4 + Mybatis 3 注解事务

    各框架的组各下来,版本就特别的多,针对简单的 使用注解来管理事务的,研究了两天,要不网上写的不清楚,要不版本都很旧了,所以就是不回滚,Spring 的配置太灵活了,在加上新手,根本就不可能明白Spring的原理,...

    使用proxool连接sybase时处理事务的问题

    总结,解决“使用proxool连接Sybase时处理事务的问题”涉及理解数据库事务原理、检查配置、调试代码以及充分利用`Proxool`提供的工具。通过这些步骤,可以定位并解决与事务处理相关的问题,从而确保数据库操作的稳定...

    java offer来了原理篇.pdf

    第七部分涵盖了数据库及分布式事务原理,包括数据库存储引擎、并发操作和锁、分布式事务等内容。数据库是现代软件系统的基石,了解其内部原理和分布式事务处理是成长为高级Java开发者不可或缺的一部分。 第八部分...

    Spring事务传播原理及数据库事务操作原理.rar

    本资料主要探讨了Spring事务的传播原理以及数据库事务的操作原理,这对于理解和使用Spring框架进行事务处理至关重要。 首先,让我们深入理解Spring事务的传播行为。在Spring中,事务的传播行为是指在一个事务方法被...

Global site tag (gtag.js) - Google Analytics