转载:https://blog.csdn.net/qq924862077/article/details/52599961

一般数据库的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

√: 可能出现    ×: 不会出现

脏读 不可重复读 幻读
说明
Read uncommitted
直译就是"读未提交",意思就是即使一个更新语句没有提交,但是别 
的事务可以读到这个改变.这是很不安全的。允许任务读取数据库中未提交的数据更改,也称为脏读。
Read committed ×
直译就是"读提交",可防止脏读,意思就是语句提交以后即执行了COMMIT以后 
别的事务就能读到这个改变. 只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 
Repeatable read × ×
直译就是"可以重复读",这是说在同一个事务里面先后执行同一个查询语句的时候,得到的结果是一样的.在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读
Serializable × × ×
直译就是"序列化",意思是说这个事务执行的时候不允许别的事务并发执行. 完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

Mybatis也是提供了如上表所示的隔离级别,只不过增加了一种没有事务,源码如下:

[java] view plaincopy
  1. /**
  2. * @author Clinton Begin
  3. */
  4. public enum TransactionIsolationLevel {
  5. NONE(Connection.TRANSACTION_NONE),
  6. READ_COMMITTED(Connection.TRANSACTION_READ_COMMITTED),
  7. READ_UNCOMMITTED(Connection.TRANSACTION_READ_UNCOMMITTED),
  8. REPEATABLE_READ(Connection.TRANSACTION_REPEATABLE_READ),
  9. SERIALIZABLE(Connection.TRANSACTION_SERIALIZABLE);
  10. private final int level;
  11. private TransactionIsolationLevel(int level) {
  12. this.level = level;
  13. }
  14. public int getLevel() {
  15. return level;
  16. }
  17. }

这样在DefaultSqlSessionFactory中创建SqlSession时,可以设置数据库的事务隔离级别,以及通过设置autoCommit来设置事务的提交方式,方式如下:

当autoCommit=false时,插入的数据报错时,修改的内容不会提交到数据库,但是如果没有进行rollback回滚操作时就会造成数据库死锁问题

当autoCommit = true对连续的操作数据中间出现错误时会部分提交,导致产生脏数据。

[java] view plaincopy
  1. private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit)

Mybatis提供的事务隔离级别完全契合数据库事务隔离级别方式。

Mybatis事务隔离级别相关推荐

  1. mybatis 源码系列(七) Java基础之数据库事务隔离级别

    更多mybatis 源码系列文章可关注我的博客,点击前往 正确设置数据库的事务访问级别,有助于我们的应用程序达到预期的效果 在mybatis中,提供了事务隔离级别的枚举类:org.apache.iba ...

  2. spring事务隔离级别、传播行为以及spring+mybatis+atomikos实现分布式事务管理

    1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...

  3. Mybatis深入:事务隔离级别和管理

    Mybatis事务管理 我们前面已经讲解了如何让Mybatis与Spring更好地融合在一起,通过将对应的Bean类型注册到容器中,就能更加方便的去使用Mapper,那么现在,我们接着来看Spring ...

  4. spring 事务隔离级别和传播行为_Spring事务传播性与隔离性实战

    一.事务传播性 1.1 什么是事务的传播性 事务的传播性一般在事务嵌套时候使用,比如在事务A里面调用了另外一个使用事务的方法,那么这俩个事务是各自作为独立的事务执行提交,还是内层的事务合并到外层的事务 ...

  5. 一文带你轻松搞懂事务隔离级别(图文详解)

    本文由 SnailClimb 和读者 BugSpeak 共同完成. 事务隔离级别(图文详解) 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事务最经典也经常被拿出来说例子就是转账了 ...

  6. spring事务隔离级别与数据库事务隔离级别的关系

    一直没搞清楚spring事务与数据库事务与锁之间的关系. spring事务: spring事务本质上使用数据库事务,而数据库事务本质上使用数据库锁,所以spring事务本质上使用数据库锁,开启spri ...

  7. 事务隔离级别和传播行为

    事务隔离级别和传播行为 再次之前自认为我对数据库事务和隔离级别很熟悉了,至少以前整理过,看过网上很多文章,有些带有命令行操作的印象挺深,但是事务传播(包块调用外部系统服务).分布式锁.mybatis一 ...

  8. 什么是事务和事务隔离级别

    目录 1. 什么是事务 2. 事务的作用 3. 事务隔离所导致的一些问题 4. 事务隔离级别 Isolation 5. 事务传播行为 Propagation 6. 事物隔离级别查看及修改 1. 什么是 ...

  9. Java面试题之Oracle 支持哪三种事务隔离级别

    Oracle 支持三种事务隔离级别: 1.读已提交:(默认) 2.串行化: 3.只读模式 转载于:https://www.cnblogs.com/hujinshui/p/10463883.html

  10. mysql 事务隔离规范_MySQL事务隔离级别以及脏读、幻读、不可重复读示例

    事务的隔离性 MySQL是一个客户端/服务器架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每个客户端与服务器连接上之后,就可以称之为一个会话(Session).每个客户端都可以在自己的 ...

最新文章

  1. sdut 3346 sdut 3344 Runtime Error Runtime Error?
  2. 在Windows2012R2中如何安装IIS8.5
  3. 组件设计实战--组件之间的关系 (Event、依赖倒置、Bridge)
  4. C++ Opengl 球形环境映射源码
  5. 第八章 流量复制/AB测试/协程
  6. 利用深度学习识别滑动验证码缺口位置
  7. 10. 单例模式(singleton pattern)
  8. 综述:环境中的噬菌体宿主互作
  9. Redis主从复制(master/slaver)
  10. 把鸡蛋放到一个篮子里,然后看好你的篮子
  11. 用树莓派搜寻地外文明
  12. git获取ssh密钥
  13. android ftdi,从 Android FTDI串行通信开始_ftdi_开发99编程知识库
  14. cannot simultaneously fetch multiple bags
  15. 看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水。
  16. 干货!MySQL常见的面试题+索引原理分析!
  17. CPU+GPU异构计算编程简介
  18. 宝峰uv5r怎么设置信道_宝峰UV-5R对讲机怎么操作?
  19. python有什么好玩的书_史上最全的Python书排行榜|你想知道的都在这里
  20. PTA 线性表 7-1 约瑟夫环(Josephus)问题(by Yan) (100分) 按出列次序输出每个人的编号

热门文章

  1. 北京交通大学《机器学习》课程总结
  2. 类成员函数作为线程函数使用
  3. 人生感悟-是留丰碑还是墓碑
  4. 计算机讲Word文档中的组合,电脑Word文档中两个表格如何合并
  5. 1563页Go语言中文文档,涵盖Go语言所有核心知识点
  6. LaTeX:斜线表头的表格制作
  7. 文书档案管理(文书与档案管理共用)【1】
  8. hadoop完全分布式搭建以及试运行
  9. Android应用分身功能介绍
  10. RK3399外设驱动之MIPI