zoukankan      html  css  js  c++  java
  • Spring 系统学习:Spring的事务管理---事务回顾

    1、事务:逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。

    2、事务的特性:

      原子性:事务不可分割;

      一致性:事务执行前后,数据的完整性保持一致;

      隔离性:一个事务的执行不应该受到其他事务的干扰;

      持久性:一旦事务结束,数据就持久化到数据库。

    3、如果不考虑隔离性,就会引发的安全性问题,例如:

      读问题:

      (1)、脏读           :一个事务读到了另一个事务正在修改但尚未提交到数据库的数据;

           脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的。

      (2)、不可重复读 :是指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。比如事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。

      (3)、虚读、幻读:一个事务读到另一个事务insert到数据库的数据,导致该事务多次查询结果不一致。例如:Transaction1读取满足某种搜索条件的一些行,然后Transaction2插入了符合Transaction1的搜索条件的一个新行。如果Transaction1重新执行产生原来那些行的查询,就会得到不同的行。

      (4)、丢失更新:两个事务都同时更新一行数据,一个事务对数据的更新把另一个事务对数据的更新覆盖了。这是因为系统没有执行任何的锁操作,因此并发事务并没有被隔离开来。

    4、为了避免上面出现的几种情况,在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同。

      Read uncommitted:未提交读,任何读问题都解决不了。

      Read committed:    已提交读,解决脏读,不可重复读和虚读可能发生。(oracle)

      Repeatable read:   重复读,解决脏读和不可重复读,但是虚读有可能发生。(mysql)

      Serializable         :   解决所有读问题。非常安全,但是效率非常低。提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。

      因此,隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。

  • 相关阅读:
    HDU4366 Successor 线段树+预处理
    POJ2823 Sliding Window 单调队列
    HDU寻找最大值 递推求连续区间
    UVA846 Steps 二分查找
    HDU3415 Max Sum of MaxKsubsequence 单调队列
    HDU时间挑战 树状数组
    UVA10168 Summation of Four Primes 哥德巴赫猜想
    UESTC我要长高 DP优化
    HDUChess 递推
    HDU4362 Dragon Ball DP+优化
  • 原文地址:https://www.cnblogs.com/JAVA-STUDYER/p/9202385.html
Copyright © 2011-2022 走看看