1.什么是事务:

事务是指程序中的一个操作序列。其特点是:该序列的所有操作要么全部成功完成,要么只要有一个操作失败,则该序列所有操作都将被撤销。这也是事务的原子性(要么成功,要么失败)。

2.事务特性:

事务特性分为四个:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability)简称ACID。

  1. 原子性(Atomicity):事务是数据库逻辑工作单元,事务中包含的操作要么都执行成功,要么都执行失败。
  2. 一致性(Consistency):事务执行的结果必须是使数据库数据从一个一致性状态变到另外一种一致性状态。当事务执行成功后就说数据库处于一致性状态。当多个事务都执行完毕后(满足第一条的原子性)若最终的数据结果跟事务执行所期望的结果不一致时,称该状态为:数据库的不一致状态。
  3. 隔离性(Isolation):一个事务的执行过程中不能影响到其他事务的执行,即一个事务内部的操作及使用的数据对其他事务是隔离的,并发执行各个事务之间无不干扰。
  4. 持续性(Durability):即一个事务执一旦提交,它对数据库数据的改变是永久性的。之后的其它操作不应该对其执行结果有任何影响。

3.事务的隔离级别:

事务的隔离级别也分为四种,由低到高依次分别为:read uncommited(读未提交)、read commited(读提交)、read repeatable(读重复)、serializable(序列化),这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

  1. read uncommited:是最低的事务隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。
  2. read commited:保证一个事物提交后才能被另外一个事务读取。另外一个事务不能读取该事物未提交的数据。
  3. repeatable read:这种事务隔离级别可以防止脏读,不可重复读。但是可能会出现幻象读。它除了保证一个事务不能被另外一个事务读取未提交的数据之外还避免了以下情况产生(不可重复读)。
  4. serializable:这是花费最高代价但最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读之外,还避免了幻象读。
  5. 脏读、不可重复读、幻象读概念说明:
    • 脏读:指当一个事务正字访问数据,并且对数据进行了修改,而这种数据还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据还没有提交那么另外一个事务读取到的这个数据我们称之为脏数据。依据脏数据所做的操作肯能是不正确的。
    • 不可重复读:指在一个事务内,多次读同一数据,得到的是不同的值。在这个事务还没有执行结束,另外一个事务也访问该同一数据,那么在第一个事务中的两次读取数据之间,由于第二个事务的修改第一个事务两次读到的数据可能是不一样的,这样就发生了在一个事物内两次连续读到的数据是不一样的,这种情况被称为是不可重复读。
    • 幻象读:一个事务先后读取一个范围的记录,但两次读取的纪录数不同,我们称之为幻象读(两次执行同一条 select 语句会出现不同的结果,第二次读会增加一数据行,并没有说这两次执行是在同一个事务中)

spring事务传播特性:

事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。spring支持7种事务传播行为:

  • propagation_requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。
  • propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。
  • propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常。
  • propagation_required_new:新建事务,如果当前存在事务,把当前事务挂起。
  • propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  • propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常。
  • propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作

Spring 默认的事务传播行为是 PROPAGATION_REQUIRED,它适合于绝大多数的情况。假设 ServiveX#methodX() 都工作在事务环境下(即都被 Spring 事务增强了),假设程序中存在如下的调用链:Service1#method1()->Service2#method2()->Service3#method3(),那么这 3 个服务类的 3 个方法通过 Spring 的事务传播机制都工作在同一个事务中。

什么是事务、事务特性、事务隔离级别、spring事务传播特性相关推荐

  1. mysql 四大基础操作_事务的四大特性和隔离级别

    MySQL是开源免费和功能多面的小型数据库,MySQL也是目前流行通用的关系型数据库,已经被 Oracle 收购了.随着版本更新升级,加入一些高级功能,MySQL6.x 版本也开始收费.不过本教程将使 ...

  2. mysql spring隔离级别_MySQL事务与Spring隔离级别实现

    1.事务具有ACID特性 原子性(atomicity):一个事务被事务不可分割的最小工作单元,要么全部提交,要么全部失败回滚. 一致性(consistency):数据库总是从一致性状态到另一个一致性状 ...

  3. 数据库事务的四个隔离级别

    [3]事务的四个隔离级别.   事务隔离级别                     脏读       不可重复读        幻读         READ_UNCOMMITTED       允 ...

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

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

  5. 事务四大特性及隔离级别

    事务四大特性及隔离级别 咱们都知道事务有四大特性ACID,也就原子性(atomicity|ætəˈmɪsəti|). 一致性(consistency).隔离性(isolation|aɪsəˈleɪʃn ...

  6. 数据库事务的四大特性以及隔离级别

    本篇文章主要介绍数据库事务的四大特性ACID,以及数据库的隔离级别. 事务 概念 事务指的是满足 ACID 特性的一系列操作.在数据库中,可以通过 Commit提交一个事务,也可以使用 Rollbac ...

  7. 《MySQL》入门基础知识点大全:数据库操作、增删改查、联表查询、常用函数、MD5加密、事务特性、隔离级别

    MySQL基础知识大全 1.操作数据库 1.1 创建表 1.2 修改表名 1.3 增加表的字段 1.4 修改表的字段 1.4.1 修改表的字段 1.4.2 修改表名 1.5 删除表的字段 1.6 删除 ...

  8. MySQL的事务总结(事务特性,隔离级别,脏读,不可重复读,幻读,常见问题)

    MySQL的事务总结(事务四大特性,隔离级别,脏读,幻读) MYSQL官网:https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-iso ...

  9. MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)

    MySQL事务原理分析(ACID特性.隔离级别.锁.MVCC.并发读异常.并发死锁以及如何避免死锁) 一.事务 目的 组成 特征 事务空间语句 二.ACID特性 原子性(A) 隔离性(I) 持久性(d ...

  10. MySQL事务特性和隔离级别(脏读、不可重复读、幻读)

    事务的ACID(acid)属性 1.原子性(Atomicity)            原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不 发生. 2.一致性(Consisten ...

最新文章

  1. 2016年网络诉求:物联网+SDN+自动化
  2. RT5350原厂SDK及AP移植步骤详解
  3. Xshell连接远程Linux服务器失败Could not connect to ‘192.xxx.xx.xxx‘ (port 22): Connection failed.
  4. DataGrid分页;指定列的总和和平均值;显示鼠标背景色;弹出式窗口;
  5. linux下samba环境搭建
  6. PLSQL连接本地的Oracle数据库
  7. 清华大学计算机导师排名,清华大学计算机科学与技术系导师简介:周立柱
  8. Kettle使用教程(问题)
  9. 使用iconfont阿里多色矢量图标
  10. 烟雨江南暂排第一,第四届橙瓜网络文学奖入围20年十佳奇幻大神
  11. 小程序uv访客怎么刷_免费小程序模板怎么选择?
  12. POJ3658Matrix( 双重二分+负数+死循环)
  13. SQLServer The datediff function resulted in an overflow
  14. html字体样式(2)
  15. offline translator android app,PROMT Offline Translator English Pack
  16. 计算机不显示固态硬盘,新装的固态硬盘不显示怎么办?
  17. Codeforces 161 B. Discounts (贪心)
  18. PHP redis配置说明
  19. 程序员,请不要天天加班
  20. [学习][Vim]行号的显示与隐藏

热门文章

  1. 分布式和集群区别以及分布式事务
  2. vue中refs的使用
  3. java使用token防止用户重复登录以及验证用户登录
  4. 转 list三种遍历效率
  5. 如何写计算机会议的rebuttal
  6. llinux下kvm虚拟化
  7. 【转载】MongoDB 1000W级数据 Insert和Query和Delete性能测试
  8. Python 网页编程- Pyramid 安装测试
  9. [Zhuan]Lua about
  10. 几个颇有创意的网站推广方法(推荐)