数据库的隔离级别就是控制并发情况下事务中间的数据读取,这些事物隔离级别就是为了处理脏读、幻读和不可重读的情况。
1. 脏读
在并发情况下,如果一个事务读取了另一个事务中未提交的数据,此时,如果另一个事务由于某种原因触发了数据回滚,那么
此时之前的事务读取到的数据就是脏数据,这个过程称为脏读。

脏读的解决办法就是让读取操作只能读取已提交的数据即可,我们只需要将事务的隔离级别设置为读已提交数据

2. 幻读
在并发情况下,如果一个事务对某一张表进行全表更新操作时,另一个事务又向该表中插入了一条数据,当前事务进行查询操
作,此时发现依然有未处理的数据,就像产生了幻觉一样,这个过程称为幻读

幻读的解决办法就是让事务的隔离级别设置为串行化,当然,我们一般不考虑这种情况,因为串行化会极大降低数据库的性能

3. 不可重复读
在并发情况下,如果一个事务前后两次读取数据的过程中,存在另一个事务将这条数据信息给更改了,导致当前事务前后两次
读取的数据不一致,这个过程称为不可重复读

不可重复读的解决办法就是将事务的隔离级别设置为可重复读。

spring中定义事务的隔离级别一共有5中:
DEFAULT, READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE

spring事务传播行为一共有7种:
1. REQUIRED:表示如果当前存在事务,那么就在当前事务中执行。如果当前不存在事务,那么就会新建一个事务执行
环境1:当前有事务(Fetched SqlSession from current transaction)
环境2:当前没有事务(Creating a new SqlSession
           Registering transaction synchronization for SqlSession)

2. SUPPORTS: 表示支持当前事务,如果当前存在事务,那么就在当前事务中执行。如果当前不存在事务,那么就以非
事务的方式执行

环境1: 当前有事务(Fetched SqlSession from current transaction)
环境2: 当前没有事务(Closing non transactional SqlSession
            Creating a new SqlSession
            Registering transaction synchronization for SqlSession
            JDBC Connection will be managed by Spring
            Releasing transactional SqlSession
            Transaction synchronization deregistering SqlSession
            Transaction synchronization closing SqlSession),信息中没有committing信息,说明不是事务
3. MANDATORY: 表示支持当前事务,如果当前存在事务,那么就在当前事务中执行。如果当前不存在事务,那么就抛出异常
环境1: 当前有事务(Fetched SqlSession from current transaction)
环境2: 当前没有事务(org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation 'mandatory')

4. REQUIRES_NEW:表示在新的事务中执行,如果当前存在事务,就将当前事务挂起来,然后新建一个事务执行。如果当前
不存在事务,就直接新建一个事务执行。
环境1: 当前有事务(Transaction synchronization suspending SqlSession
           Creating a new SqlSession
           Registering transaction synchronization for SqlSession
           Releasing transactional SqlSession
           Transaction synchronization deregistering SqlSession
           Transaction synchronization closing SqlSession
           Transaction synchronization resuming SqlSession)
环境2: 当前没有事务(Creating a new SqlSession
            Registering transaction synchronization for SqlSession)

5. NOT_SUPPORTED:表示以非事务的方式执行,如果当前存在事务,则将当前事务给挂起来
环境1: 当前有事务(Transaction synchronization suspending SqlSession
           Creating a new SqlSession
           Registering transaction synchronization for SqlSession
           Releasing transactional SqlSession
           Transaction synchronization deregistering SqlSession
           Transaction synchronization closing SqlSession
           Transaction synchronization resuming SqlSession)
环境2: 当前没有事务(Creating a new SqlSession
            Registering transaction synchronization for SqlSession
            Releasing transactional SqlSession
            Transaction synchronization deregistering SqlSession
            Transaction synchronization closing SqlSession)
6. NEVER:表示以非事务的方式执行,如果当前存在事务,则抛出异常
环境1: 当前有事务(org.springframework.transaction.IllegalTransactionStateException: Existing transaction found for transaction marked with propagation 'never')
环境2: 当前没有事务(Creating a new SqlSession
            Registering transaction synchronization for SqlSession
            Releasing transactional SqlSession
            Transaction synchronization deregistering SqlSession
            Transaction synchronization closing SqlSession)
7. NESTED:表示如果当前存在事务,则嵌套在当前事务中执行,否则,其行为与REQUIRED一样
环境1: 当前有事务(Fetched SqlSession from current transaction)
环境2: 当前没有事务(Creating a new SqlSession
            Registering transaction synchronization for SqlSession
             Releasing transactional SqlSession
             Transaction synchronization committing SqlSession
             Transaction synchronization deregistering SqlSession
             Transaction synchronization closing SqlSession)

事务隔离级别与事务传播行为简介相关推荐

  1. 【概念原理】四种SQL事务隔离级别和事务ACID特性

    2019独角兽企业重金招聘Python工程师标准>>> 事务是一组读写操作,并且具有只有所有操作都成功才算成功的特性. 事务隔离级别 SQL事务隔离级别由弱到强分别是:READ_UN ...

  2. Spring事务隔离级别,事务传播行为

    什么是事务:  事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. Spring事务的隔离性(5种) 在讲隔离界别前,我们先来讲讲下基础知识 事务的特性(ACID) 原子性 ...

  3. mysql 默认事务隔离级别_MySQL 事务隔离级别详解

    个人公众号『码农札记』,欢迎关注,查看更多精彩文章. 简介: MySQL的事务隔离级别一共有四个,分别是读未提交.读已提交.可重复读以及可串行化. 四个特性ACID 原子性 (Atomicity) 事 ...

  4. polardb mysql 事务隔离级别_事务的四种隔离级别

    数据库事务的隔离级别有4种,由低到高分别为Read uncommitted .Read committed .Repeatable read .Serializable .而且,在事务的并发操作中可能 ...

  5. mysql jdbc 事务隔离级别_JDBC事务隔离级别,看完这篇文章就够了!

    作者:DencyCheng 来源:CSDN 1. 事务基本概念 一组要么同时执行成功,要么同时执行失败的SQL语句.是数据库操作的一个执行单元. 事务开始点 连接到数据库上,并执行一条DML语句ins ...

  6. MySQL事务篇:ACID原则、事务隔离级别及事务机制原理剖析

    引言 众所周知,MySQL数据库的核心功能就是存储数据,通常是整个业务系统中最重要的一层,可谓是整个系统的"大本营",因此只要MySQL存在些许隐患问题,对于整个系统而言都是致命的 ...

  7. 什么是事务隔离级别,事务隔离级别详解

    生命中曾经有过的所有灿烂,原来终究,都需要用寂寞来偿还. 在IT行业,无论是oracle,mysql,还是postgresql数据库,为了保证数据库并发性能和数据一致性,都实现了MVCC功能(多版本并 ...

  8. Spring五个事务隔离级别和七个事务传播行为

    Spring五个事务隔离级别和七个事务传播行为 1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数 ...

  9. Java提升篇-事务隔离级别和传播机制

    转载自 Java提升篇-事务隔离级别和传播机制 问题的提出 为了保证并发操作数据的正确性及一致性,SQL规范于1992年提出了数据库事务隔离级别. 事务隔离级别分类 事务隔离级别由低往高可分为以下几类 ...

最新文章

  1. sql语句语法多表关联_SQL Delete语句-如何删除行或表,语法示例
  2. mysql unicode转汉字_如果有人问你 MySql 怎么存取 Emoji,把这篇文章扔给他
  3. Windows设置HTML,windows怎么添加静态路由
  4. mysql断网_断网的情况上如何访问本机的mysql
  5. linux 文件理解,linux文件系统理解
  6. 基于JRTPLIB库的RTP数据传输设计文档(1)
  7. java自定义栈类代码,异常堆栈和自定义类
  8. php phar,PHP中phar(PHP Archive)包的创建并使用
  9. 我对敏捷的理解:实施敏捷的前提
  10. mfc oracle数据库编程,testmfc - 源码下载|数据库系统|Oracle数据库|源代码 - 源码中国...
  11. 批处理保存windows10开机壁纸
  12. Linux 虚拟机内挂载 iso 文件
  13. cad命令栏怎么调出来_中望CAD菜单栏和功能栏都消失怎么办
  14. 网页设计css入门,网页设计基础:Div+CSS布局入门教程
  15. 励磁电感公式_ANSYS Maxwell 电感矩阵计算
  16. Java实现手机号码、邮箱账号加密
  17. 学习Java第一天笔记
  18. Windows 10怎样安装.msi文件?三分钟解决问题
  19. Saver类--变量的保存和恢复
  20. jenkins创建新用户_Jenkins凭据管理

热门文章

  1. 《痞子衡嵌入式半月刊》 第 56 期
  2. matlab物理仿真可视化,基于Matlab的建模和仿真
  3. 大学计算机实验教程制作电子小报,word中电子小报怎么做?word电子小报的图文教程...
  4. flex 移动开发 html5,[ html5 ] 移动端适配方案 flex布局+rem布局
  5. 我所理解的羽毛球运动(没有教练业余羽毛球如何让自己提高?)
  6. 生活所迫?那些年摆过的地摊,有你么?
  7. 搭建个人网站--域名申请
  8. docker具名挂载与匿名挂载
  9. 南航计算机科学与技术学院院徽,南京航空航天大学计算机科学与技术学院简介...
  10. word插入分页符后在下一页开始出现一个回车符,这个回车符如何删掉,但不影响分页