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

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

  • 相关阅读:
    pycharm初始配置
    个人Python笔记
    Linux硬盘分区
    Linux基础(三)
    Linux基础(二)
    linux基础之基本命令
    计算机网络基础
    计算机操作系统
    计算机基础
    vim编辑器
  • 原文地址:https://www.cnblogs.com/JAVA-STUDYER/p/9202385.html
Copyright © 2011-2022 走看看