zoukankan      html  css  js  c++  java
  • Java中事务的概念

    | 版权声明:本文为博主原创文章,未经博主允许不得转载。

    前言:

    在学习事务确实有不少弯路,那么今天笔者就用例子讲解一下事务,让初学者少走一些弯路。

     

    【回顾事务】问:什么是事务?

          答:用专业术语来说事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败。

      举个银行转账的例子:

      ①张三账上有2000元,李四账号也有2000元。张三要向李四转账1000元,正常来说应该是张三账上-1000元,李四账上+1000元。最后张三账上还剩1000元,李四账上3000元。这样就完成了一个转账的操作。

      ②但这组操作不应该出现的情况就是:张三转了1000元之后断电了,或者出现其他的特殊情况。这样就不应该出现张三转出1000元,而李四账上没收到1000元。所以在这种情况下的一组操作我们可以用一个事务来管理。如果这组操作加入了事务管理里面,那么这组操作就必须一起成功,或者一起失败。一起成功就是张三转出1000元,还剩1000元,李四收到1000元账上3000元。如下图:

    以上就是事务的概念:这组操作要么全部成功,要么全部失败。

    在事务当中有一些相关的特性:

    事务的特性:

          1.原子性(是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生)

          2.一致性(指的是事务执行前后数据的完整性必须保持一致,举个例子:张三转账前是2000元,李四2000元,总数是4000元,转账后张三账上1000元,李四3000元,总数也是4000元。所以说不能出现张三转出去,李四没收到这种情况。)

          3.隔离性(多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离。举个例子:假设有两个事务同时操作数据库,事务1在修改张三的的记录,事务2同时也在修改张三的记录。那么就会出现①事务重复修改,②一开始事务修改后的记录被第二个事务所覆盖)如下图:

                              

            问:怎么解决这个问题(①重复修改 /②被覆盖)呢? 答:数据库有相应的隔离级别,我们可以通过设置这种隔离级别来解决这个问题

          4.持久性(一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响)

  • 相关阅读:
    LeetCode 1110. Delete Nodes And Return Forest
    LeetCode 473. Matchsticks to Square
    LeetCode 886. Possible Bipartition
    LeetCode 737. Sentence Similarity II
    LeetCode 734. Sentence Similarity
    LeetCode 491. Increasing Subsequences
    LeetCode 1020. Number of Enclaves
    LeetCode 531. Lonely Pixel I
    LeetCode 1091. Shortest Path in Binary Matrix
    LeetCode 590. N-ary Tree Postorder Traversal
  • 原文地址:https://www.cnblogs.com/gt18552/p/5973515.html
Copyright © 2011-2022 走看看