事物(Transaction)
目录
一、什么是事物?
二、为什么需要事物?
三、事物的四个属性
1、原子性
2、一致性
3、隔离性
事物的隔离级别
4、持久性
四、事物的传播行为
spring中定义了其中事物的传播行为
五、MySQL的存储引擎
常用的存储引擎(InnoDB、MyISAM)的区别
六、关于spring中的@Transactional注解
@Transactional的作用域
一、什么是事物?
事物(Transaction)是指将一系列数据操作捆绑成为一个整体进行统一管理。如果某一事物执行成功,则该事物中进行的所有数据更改均会提交,成为数据库中的永久组成部分。如果事物执行时遇到错误且必须取消回滚,则数据将全部恢复到操作前的状态,所有数据的更改均被清除。
事物是一种机制,一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么全部执行,要么全部不执行。因此,事物是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事物是作为最小的控制单元来使用的,特别适用于多用户同时操作的数据库系统。
二、为什么需要事物?
比如一个银行业务,有一条记账规则,即有借有贷,借贷相等。为了保证这种原则,每发生一笔银行业务,就必须确保会计账目上借方科目和贷方科目至少各记一笔,并且这两笔账要么同时成功,要么同时失败。如果只记录了借方科目,或者只记录了贷方科目的情况,就位反了记账原则,会出现记错账的情况。
三、事物的四个属性
1、原子性:
事物时一个完整的操作,事物的各个元素是不可分的(原子的)。事物中的所有元素必须作为一个整体提交或回滚。如果事物中的任何元素失败,整个事物将失败。
2、一致性:
当事物完成时,数据必须处于一致状态。也就是说,在事物开始之前,数据库中存储的数据处于一致状态,在正在进行的事物中,数据可能处于不一致的状态,如数据可能有部分被修改。然而,当事物成功完成时,数据必须再次回到已知的一致状态。通过事物对数据所做的修改不能损坏数据,或者说事物不能使数据存储于不稳定状态。
3、隔离性:
对数据进行修改的所有并发事物是彼此隔离的,这表明事物必须是独立的,他不应该以任何方式依赖于或者影响其他事物。修改数据的事物可以在另一个使用相同数据的事物开始之前访问这些数据或者在另一个使用相同的数据的事物结束后访问这些数据。另外,当事物修改数据时,如果任何其他进程正在同时使用相同的数据,则直到该事物成功提交后,对数据的修改才能生效。银行业务中,张三和李四之间的转账与王五与赵二之间的转账,永远是相互独立的。
事物的隔离级别:
第一种隔离级别:Serializable(可序化)
提供了严格的事物隔离,要求事物必须序列化执行,只能一个接着一个执行,不能并发执行。序列化是最高的事物隔离级别,同时代价也是最高的,性能低,该级别下,事物顺序执行,避免脏读,不可重复读,幻读。
第二种隔离级别:Repeatable read(可重复读取)
可重复读是指在一个事务内,多次读同一个数据,在这个事物还未结束时,其它事物不能访问该数据,这样就可以在同一个事物中两次读到的数据是一样的,因此可以称为是可以重复读隔离级别。
第三种隔离级别:Read committed(读提交)
如果是一个读事物,则允许其他事物读写,如果是写事物,将会禁止其他事物访问该行数据,避免了脏读,但可能出现不可重复读,事务A事先读取了数据,事务B紧接着更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。
第四种隔离级别:Read uncommitted(读未提交)
如果一个事物已经开始写数据,则另外一个事物不允许同时进行写操作,但允许其他事物读取此行数据,避免更新丢失,但可能出现脏读,也就是事物B读取到了事物A未提交的数据。
MySQL默认的事物隔离级别是:repeatable-read(可重复读取)
4、持久性:
事物的持久性指不管系统是否发生故障,事物处理的结果都是永久的。一个事物成功完成后它对于数据库的改变是永久性的。即使系统出现故障也是如此。也就是说,一旦事务提交,事物的效果就会永久地保留在数据库中。
四、事物的传播行为
事物的传播行为指的是当一个事物方法被另外一个事物方法调用时,这个事物方法应该如何进行。比如:事物A方法调用事物B方法时,事物B是继续在调用者事物A中运行呢,还是自己开启一个新的事物运行,这就是由事物B的事物传播行为决定的。
spring中定义了其中事物的传播行为: 五、MySQL的存储引擎
存储引擎是MySQL数据库管理系统的一个重要特征,在项目开发时,为了提高MySQL数据库的使用效率和灵活性,可以根据实际需要来选择存储引擎。因为存储引擎指定了表的存储类型,如何存储和索引数据、是否支持事物等,同时存储引擎也决定了表在计算机中的存储方式。
MySQL支持的存储引擎有InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE等。可以使用SHOW ENGINES语句查看系统所支持的引擎类型
常用的存储引擎(InnoDB、MyISAM)的区别:
六、关于spring中的@Transactional注解
@Transactional 是 Spring 提供用来控制事务回滚/提交的一个注解,让我们从编程式注解转换到声明式注解。
@Transactional的作用域:
@Transactional注解可以作用于接口、接口方法、类以及类方法上
- 当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性
- 当作用在方法级别时会覆盖类级别的定义
- 当作用在接口和接口方法时则只有在使用基于接口的代理时它才会生效,也就是JDK动态代理,而不是Cglib代理
- 当在 protected、private 或者默认可见性的方法上使用 @Transactional 注解时是不会生效的,也不会抛出任何异常
- 默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰
事物(Transaction)相关推荐
- 【数据挖掘】关联规则挖掘 Apriori 算法 ( 关联规则简介 | 数据集 与 事物 Transaction 概念 | 项 Item 概念 | 项集 Item Set | 频繁项集 | 示例解析 )
文章目录 一. 关联规则挖掘简介 二. 数据集 与 事物 ( Transaction ) 概念 三.项 ( Item ) 概念 四.项集 ( Item Set ) 概念 五.频繁项集 六.数据集.事物 ...
- 022_Jedis的事物
1. 新建一个名为JedisTransaction的Java项目, 拷入相关jar包, 并添加到build path 2. 编辑JedisTransaction.java package com.re ...
- 解决 : Could not commit JPA transaction RollbackException: Transaction marked as rollbackOnly
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 报错如题: RollbackException: Transaction marked as ...
- 总结之:CentOS 6.5 MySQL/MariaDB日志及事物详解和基本操作语句
MySQL日志类别: 一般查询日志:log,general_log,log_output 慢查询日志:查询执行的时长超过指定的查询,即为慢查询: 错误日志:通常时指错误日志的相关信息 ...
- CentOS6.5下MariaDB日志及事物详解和基本操作语句
MySQL日志类别: 一般查询日志:log,general_log,log_output 慢查询日志:查询执行的时长超过指定的查询,即为慢查询: 错误日志:通常时指错误日志的相关信息 ...
- Hibernate复习之Hibernate基本介绍
众所周知.眼下流行的面向对象的对象关系映射的Java持久层框架有MyBatis和Hibernate.他们都是对象关系映射ORM. 解决的主要问题就是对象-关系的映射.域模型和关系模型都分别建立在概念模 ...
- MySQL 性能优化的 9 种姿势,面试再也不怕了!
欢迎关注方志朋的博客,回复"666"获面试宝典 1.选择最合适的字段属性 Mysql是一种关系型数据库,可以很好地支持大数据量的存储,但是一般来说,数据库中的表越小,在它上面执行的 ...
- Hibernate总结
持久化与ORM Hibernate的优点 实体关系映射文件 Hibernate五大核心接口 Hibernate在性能提升上的常用方法 Hibernate工作原理 一.持久化与ORM 持久化:数据持久化 ...
- mysql什么情况会加意向锁_MySQL中的锁4-插入意向锁和自增锁
插入意向锁(Insert Intention Lock) 插入意向锁本质上可以看成是一个Gap Lock 普通的Gap Lock 不允许 在 (上一条记录,本记录) 范围内插入数据 插入意向锁Gap ...
- 【数据挖掘】关联规则挖掘 Apriori 算法 ( Apriori 算法过程 | Apriori 算法示例 )
文章目录 一. Apriori 算法过程 二. Apriori 算法示例 参考博客 : [数据挖掘]关联规则挖掘 Apriori 算法 ( 关联规则简介 | 数据集 与 事物 Transaction ...
最新文章
- Fragment-FragmentMannager中的方法
- 阿里工程师如何叫外卖?99%的人猜不到
- 2013百度校园招聘-机器学习和数据挖掘工程师-笔试题
- SAP Fiori Launchpad的后台配置路径
- 网络编程-TCP/IP协议栈-IP协议
- 揭秘!双非渣本Android四年磨一剑,学习路线+知识点梳理
- mysql操作数据库
- java 图形题,20140314 java练习题-打印各种图形
- 还不会使用linux?快来通过VMware安装centos系统吧~
- 前端—每天5道面试题(十一)
- 【Java从0到架构师】MyBatis - 增删改、动态 SQL
- Eclipse及Android环境配置
- 流媒体之RTMP——librtmp推流测试
- Springboot课程试题库管理系统毕业设计源码271129
- vbs自动登陆115网盘代码
- Groovy~Groovy介绍
- Java Math类方法介绍之史上最全
- java中ofd文件转pdf_OFD版式文档Java开发组件(iOFD)
- API 开放接口设计之 appId,appSecret,accessToken (同微信开发平台接口)
- 航美传媒美国上市 融资1.8亿美元
热门文章
- 全面比较Aptos和Sui:Aptos已上线 来看看Sui
- 10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第7天 2018/11.1
- Derby 数据库内涵
- (C语言)不变初心数 (15 分)---pta
- win10计算机安全模式怎么,Win10系统怎么快速进入安全模式?
- 一张图,区分NPN于PNP型三极管的工作原理
- NYOJ:33-蛇形填数
- Sectigo邮件签名证书安装指南
- 蓝旭暑期培训——DOM事件+正则表达式
- windows 远程桌面客户端