一.什么是事务?

事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元);

事务的四大特性:原子性,一致性,隔离性,持续性。

1 、原子性
事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做
2 、一致性
事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。
3 、隔离性
一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
4 、持续性
也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

二.事务的隔离级别。

第一种隔离级别:Read uncommitted(读未提交)

解决了更新丢失,但还是可能会出现脏读

第二种隔离级别:Read committed(读提交)

解决了更新丢失和脏读问题

第三种隔离级别:Repeatable read(可重复读取)

解决了更新丢失、脏读、不可重复读、但是还会出现幻读

第四种隔离级别:Serializable(可序化)

解决了更新丢失、脏读、不可重复读、幻读(虚读)

四种隔离级别最高的是Serializable级别,最低的是Read uncommitted级别,当然级别越高,执行效率就越低,像Serializeble这样的级别,就是以锁表的方式(类似于Java多线程中的锁)使得其他线程只能在锁外等待,所以平时选用何种隔离级别应该根据实际情况来,在MYSQL数据库中默认的隔离级别是Repeatable read(可重复读)。

在MYSQL数据库中,支持上面四种隔离级别,默认的为Repeatable read(可重复读);而在Oracle数据库中,只支持Serializeble(串行化)级别和Read committed(读已提交)这两种级别,其中默认的为Read committed级别。

三.事务的传播行为

1.什么是事务的传播行为?

事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何运行。

2.事务的7种传播行为:required / supports / mandatory / requires_new / not supported / never / nested

PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,这是最常见的选择,也是Spring默认的事务传播行为。(required需要,没有新建,有加入)。
PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。(supports支持,有则加入,没有就不管了,非事务运行)。
PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。(mandatory强制性,有则加入,没有异常)。
PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。(requires_new需要新的,不管有没有,直接创建新事务)。
PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。(not supported不支持事务,存在就挂起)。
PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。(never不支持事务,存在就异常)。
PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则按REQUIRED属性执行。(nested存在就在嵌套的执行,没有就找是否存在外面的事务,有则加入,没有则新建)。

事务的隔离级别和传播行为!相关推荐

  1. 哒哒哒~~今天说 事务的隔离级别和传播特性

    哒哒哒~~今天说 事务的隔离级别和传播特性 正所谓在数据库中,所谓事务是指一组逻辑操作单元即一组sql语句.当这个单元中的一部分操作失败,整个事务回滚,只有全部正确才完成提交. 事务的ACID属性 原 ...

  2. 事务隔离级别和传播行为_.spring的事务有几种方式?spring事务的隔离级别和传播行为是什么?...

    展开全部 Spring提供了许多内置事务管理器实现,常用的有: DataSourceTransactionManager(JDBC局部事务):62616964757a686964616fe59b9ee ...

  3. 事物的级别_实战分析:事务的隔离级别和传播属性

    什么是事务? 要么全部都要执行,要么就都不执行. 事务所具有的四种特性 原子性,一致性,隔离性,持久性 原子性 个人理解,就是事务执行不可分割,要么全部完成,要么全部拉倒不干. 一致性 关于一致性这个 ...

  4. spring事务的隔离级别和传播特性详解(附实例)

    spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager.对于编程式事务 ...

  5. oracle事物的传播属性,spring事务的隔离级别和传播属性

    /*** @author 王政* @date 2006-11-24* @note 转载自http://www.iteye.com/topic/35907?page=1*/ ********Transa ...

  6. SpringBoot之事务处理:隔离级别与传播行为

    在Spring中,数据库事务是通过AOP技术来提供服务的.对于声明式事务,是使用@Transactional进行标注的.在@Transactional允许配置许多事物的属性,如事务的隔离级别与传播行为 ...

  7. Spring Boot 2.x 事务处理(一篇长文让你读懂什么是隔离级别和传播行为)

    写在前面 在互联网发达的时代里,对于那些电商和金融网站,最关注的的内容毫无疑问就是数据库事务,因为对于热门商品的交易和库存以及金融产品的金额,是绝对不允许发生错误的.面对这样的高并发场景,掌握数据库事 ...

  8. 13-SpringBoot之数据库(四)——事务处理:隔离级别与传播行为

    SpringBoot之数据库(四)--事务处理:隔离级别与传播行为 1. 隔离级别(isolation) 1.1 未提交读 1.2 读写提交 1.3 可重复读 1.4 串行化 1.5 使用合理的隔离级 ...

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

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

最新文章

  1. 简单实现ConfigurationManager.AppSettings[]效果存储系统变量
  2. nightwatchjs --Expect element to not include text
  3. 思考:用开发移动app的观念来开发网站
  4. redis4.0之基于LFU的热点key发现机制
  5. Bluetooth LE(低功耗蓝牙) - 第五部分
  6. 16 导出pcb各网络的布线长度_PCB原理图常见错误分析
  7. 利用反射自动封装成实体对象
  8. instancing render
  9. 5款替代微软Visio的开源免费软件(转)
  10. 如何解决EXCEL中的科学计数法
  11. dfs深度优先搜索_图的深度优先搜索(DFS)
  12. 毕业设计——如何画系统功能结构图?
  13. 立即寻址,直接寻址,间接寻址
  14. 最长上升子序列 CSU - 1047 ( LIS LCS )
  15. SQL的select 语句的执行顺序
  16. 照相机的计算机微处理器芯片是什么,芯片到底是什么?
  17. 计算广告第四章——合约广告
  18. 听歌什么蓝牙耳机好用?听歌比较好的蓝牙耳机推荐
  19. Erlang并发编程(五) --- bigwig
  20. C++程序避免触发 Win7下的程序兼容助手

热门文章

  1. Neo4j · 建立2022年的中国电影图谱
  2. android返回键webview返回,Android WebView 物理返回键遇到重定向处理
  3. SAP FICO 一文看懂财务三张表
  4. Docker 镜像仓库搭建
  5. mysql更改师徒,梦幻西游师徒系统正式开启 师徒系统玩法介绍
  6. 全国多地商品房网签采用电子签章,君子签助推房产交易驶入数字化“快车道”
  7. 导出的图片太大导致无法打开的解决方案
  8. 自我介绍以及对软件工程课程的看法
  9. HTTP 请求方法大全| HTTP Request Method
  10. html超链接怎么新建窗口打开,html超链接新窗口打开怎么写