zoukankan      html  css  js  c++  java
  • JAVA事务

    java事务包含: InnerDB

      JDBC型事务:应用于单一数据库。

      JTA型事务:适用于分布式数据库。

      

      jdbc事务处理的同一资源链接内的业务,获取链接之后,如果这个事务中存在多个sql业务处理,其中任意一个失败,则整体失败,可回滚。

        使用方式为设置不自动提交 : AutoCommit = false , connection.commit(); connection.rollback();

      JTA事务,使用UserTransaction,可用来处理同一业务中对不同库操作的事务处理,当有失败的时候,可整体回滚。

        使用方式变更为:begin(),commit(),rollback();

      事务要遵循ACID原则,即:原子性、一致性、隔离性、持久性。

      A(atomicity):即一个事务里面的操作要么全部成功,要么全部失败。

      C(Consistency):事务的执行使得数据库从一种正确状态转换成另一种正确状态。

      I(isolation):在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,即在事务正确提交之前,它可能的结果不应显示给任何其他事务。

      D(durability):事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。

      对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题,这些并发问题可归纳为以下几类:

        第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖。 

        脏读:一个事务读到另一个事务为提交的更新数据。

        虚读:一个事务读到另一个事务已提交的新插入的数据。  

        不可重复读:一个事务读到另一个事务已提交的更新数据。

        第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据。  

    数据库隔离级别:

      数据库隔离级别分为4种:

        1、串行化(Serializable):一个事务在执行过程中完全看不到其他事务对数据库所做的更新。

        2、可重复读(Repeatable Read):  一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他事务对已有记录的更新。

        3、读已提交数据(Read Commited):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,而且能看到其他事务已经提交的对已有记录的更新

        4、读未提交数据(Read Uncomitted):一个事务在执行过程中可以看到其他事务没有提交的新插入的记录,而且能看到其他事务没有提交的对已有记录的更新。

      等级高低由上而下,隔离级别越高,越能保证数据一致性和完整性,但是对并发性能的影响也越大。一般数据库隔离级别定义在Read Commited,它能够避免脏读,而且具有较好的并发性能,其他额外的问题通过应用程序来处理。

      基本上在Read Commited的时候,可能会产生不可重复读和第二类丢失更新。可以采用悲观锁和乐观锁处理。

  • 相关阅读:
    日期和时间运算:上月最后一天
    SY全局系统字段
    内表、结构赋值转换规则
    基本类型赋值转换规则表
    嵌套结构使用:struc1-struc2-XXX
    TYPES、DATA、TYPE、LIKE、CONSTANTS、STATICS、TABLES
    ABAP WRITE、WRITE TO、FORMAT语句
    ABAP DESCRIBE语句
    数据词典与ABAP类型映射
    Field+offset(len)
  • 原文地址:https://www.cnblogs.com/binbang/p/6419975.html
Copyright © 2011-2022 走看看