Spring学习--事务简介

 数据库的事务概述
    1.1 事务是什么?
          事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的.即所有的事情要么都做,或者要么都不做,这就是事务.
    1.2 事务的特性(原子性,隔离性,一致性,持久性)缺一不可.
          原子性(Atomicity): 即事务是最小的工作单元,事务内的操作要么全做,要么全不做.
          隔离性(Isolation):  并发事务之间没有影响,在一个事务内部的操作对其他事务的执行是不产生影响的,这需要事务的隔离级别来确定隔离性.
          一致性(Consistency): 在事务执行之前,数据库的数据处于正常状态,事务处理之后,数据库的数据任然处于正常状态,即数据的完整性没有被破坏.
         持久性(Durability): 事务一旦执行成功,那么它对数据库的影响是永久的,不会受外界因素导致数据不一致.
    1.3 常见的并发操作数据库问题
          在日常开发中,并发操作数据库是很常见的事,然而多个事务的并发执行会导致一系列问题产生.
          1) 丢失更新: 两个事务同时更新一行数据,后面的那个事务更新会覆盖前一个事务的更新,从而导致第一个事务更新的数据丢失.
          2) 脏读: 一个事务看到另一个事务未提交的更新数据
          3)不可重复读: 在同一事务中, 多次读取同一数据却返回不同的结果;也就是其他事务更改了这些数据
         4)幻读: 一个事务在执行过程中读取到了另一个事务已经提交的插入数据;即第一个事务开始读取一批数据,但此后另一个事务又插入了新数据并提交;此时第一个事务又读取的这批数据,但是发现多了一条,即好像发生了幻觉一样.
    1.4 事务的隔离级别
          为了解决事务并发的问题,需要通过数据库的隔离级别来解决,以下是定义的4种数据库的隔离级别:
          1.未提交读:  最低的隔离级别.一个事务能够读取到别的事务未提交的更新数据,很不安全,可能出现丢失更新,幻读,脏读,不可重复读等问题.
          2.提交读: 一个事务能够读取到别的事务的更新数据,不能看到未提交的更新数据, 解决了丢失更新,脏读问题.
         3. 可重复读: 保证同一事务中先后执行的多次查询将返回同一结果,不受其他事务的影响,可能出现丢失更新,脏读,不可重复读,但是解决了幻读.
         4. 序列化: 最高隔离级别.不允许事务并发执行,而必须串行执行,最安全,上述问题都不可能出现.
    1.5 常见操作我们应该使用什么隔离级别
          隔离级别越高,数据库事务并发执行性能越差,能处理的操作越少。因此在实际项目开发中为了考虑并发性能一般使用提交读隔离级别,它能避免丢失更新和脏读,尽管不可重复读和幻读不能避免,但可以在可能出现的场合使用悲观锁或乐观锁来解决这些问题。
    1.6事务类型
        1)  数据库事务类型有本地事务和分布式事务
             1. 本地事务: 就是普通事务,能够保证单台机器上的事务处理.
             2. 分布式事务: 涉及两个或多个数据库源的事务,即跨多台同类或异类的数据库事务(由每台数据库的本地事务组成),分布式事务旨在保证这些本地事务的所有操作的特性(事务的特性),使事务可以跨多台数据库.
        2) java事务又JDBC事务和JTA事务
            1. jdbc事务: 就是数据库事务类型中的本地事务,通过Connection对象来管理
            2. jta事务: JTA指的是java事务API(java Transaction API), 是javaEE数据库事务的规范,JTA只提供了事务的管理接口,由应用厂商提供实现,JTA事务还支持分布式事务,比jdbc事务更强大.
        3) java EE 事务类型有本地事务和全局事务
            1. 本地事务: 即由JDBC编程实现的事务
            2. 全局事务: 由应用程序服务器提供,使用JTA事务.
        4)其他分类
            1. 声明式事务: 通过注解和配置文件指定事务信息
            2. 编程式事务: 通过编写代码实现事务.
    1.7Spring的事务管理
         Spring框架为我们提供了一致标准的事务抽象,因此也就提供了一致的编程式事务管理API还有无侵入式的声明式事务支持.

猜你喜欢

转载自464034065.iteye.com/blog/2170864