隔离级别

Spring/SpringMVC

孤者浪人 提交于 2019-12-04 20:35:41
1. 介绍spring框架 Spring是一套为了解决企业应用开发的复杂性而创建的框架,特点是分层的架构,允许用户在不同层面使用不同的组件进行组合。同时通过IOC容器来降低耦合,简化开发。利用AOP来进行切面编程统一管理通用模块。 2.Spring中AOP的应用场景、Aop原理、好处? 主要是两种,一种是JDK动态代理,一种是Cglib代理。 两者的区别: JDK动态代理只能代理实现了接口的类,动态代理类的字节码在程序运行时由Java反射机制动态生成。 Cglib是可以代理没有实现接口的类,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,所以不能对final修饰的类进行代理。底层采用ASM实现。 原理: AOP是面向切面编程,是通过动态代理(jdk动态代理)的方式为程序添加统一功能,集中解决一些公共问题。 AOP就是纵向的编程,如业务1和业务2都需要一个共同的操作,与其往每个业务中都添加同样的代码,不如写一遍代码,让两个业务共同使用这段代码。在日常有订单管理、商品管理、资金管理、库存管理等业务,都会需要到类似日志记录、事务控制、权限控制、性能统计、异常处理及事务处理等。AOP把所有共有代码全部抽取出来,放置到某个地方集中管理,然后在具体运行时,再由容器动态织入这些共有代码。 优点: 各个步骤之间的良好隔离性耦合性大大降低 源代码无关性

【转】新说Mysql事务隔离级别

China☆狼群 提交于 2019-12-04 19:05:06
作者:孤独烟 转自: https://www.cnblogs.com/rjzheng/p/9955395.html 引言 大家在面试中一定碰到过 说说事务的隔离级别吧? 老实说,事务隔离级别这个问题,无论是校招还是社招,面试官都爱问!然而目前网上很多文章,说句实在话啊,我看了后我都怀疑作者弄懂没!因为他们对可重复读(Repeatable Read)和串行化(serializable)的解析实在是看的我一头雾水! 再加上很多书都说可重复读解决了幻读问题,比如《mysql技术内幕--innodb存储引擎》等,不一一列举了,因此网上关于事务隔离级别的文章大多是有问题的,所以再开一文说明! 本文所讲大部分内容,皆有官网作为佐证,因此对本文内容你可以看完后,你完全可以当概念记在脑海里,除非官网的开发手册是错的,否则应当无误! 另外,本文会重点说一下 可重复读(Repeatable Read)是否真的解决幻读的问题! 正文 开始我先提一下,根据事务的隔离级别不同,会有三种情况发生。即脏读、不可重复读、幻读。这里我先不提这三种情况的定义,后面在讲隔离级别的时候会补上。 这里,大家记住一点,根据脏读、不可重复读、幻读定义来看(自己总结,官网没有),有如下包含关系: 那么,这张图怎么理解呢? 即,如果发生了脏读,那么不可重复读和幻读是一定发生的。因为拿脏读的现象,用不可重复读,幻读的定义也能解释的通

spring事务的隔离级别和传播方式

大憨熊 提交于 2019-12-04 09:45:39
传播行为 事务传播行为类型 说明 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。 PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 PROPAGATION_REQUIRES_NEW 启动一个新的, 不依赖于环境的 "内部" 事务. 这个事务将被完全 commited 或 rolled back 而不依赖于外部事务, 它拥有自己的隔离范围, 自己的锁, 等等. 当内部事务开始执行时, 外部事务将被挂起, 内务事务结束时, 外部事务将继续执行. 另一方面, PROPAGATION_NESTED 开始一个 "嵌套的" 事务

MySQL事务隔离级别

二次信任 提交于 2019-12-04 07:08:50
  事务有 ACID 四个基本属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)   数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。—— 维基百科 事务的概念看上去不难,但是需要注意以下几个点: 1、首先,事务就是要保证一组数据库操作,要么全部成功,要么全部失败; 2、在 MySQL 中,事务支持是在 引擎层 实现的; 3、并不是所有引擎都支持事务,如 MyISAM 就不支持,InnoDB 就支持; 今天,我们的主角是 隔离性 ,隔离性是指当多个用户并发操作数据库时,数据库为每一个用户开启不同的事务,这些事务之间相互不干扰,相互隔离。 脏读   脏读(dirty read),简单来说,就是一个事务在处理过程中读取了另外一个事务未提交的数据。这种未提交的数据我们称之为脏数据。依据脏数据所做的操作肯能是不正确的。 不可重复读   不可重复读(non-repeatable read), 是指一个事务范围内,多次查询某个数据,却得到不同的结果 。 在第一个事务中的两次读取数据之间,由于第二个事务的修改, 第一个事务两次读到的数据可能就是不一样的。   脏读和不可重复读的区别: 脏读 是某一事务 读取了 另外一个事务 未提交 的数据, 不可重复读

Mysql事务隔离级别

只谈情不闲聊 提交于 2019-12-04 04:18:22
一、事务的四大特性(简称ACID) 数据库如果支持事务的操作,那么就具备以下四个特性: 1、原子性(Atomicity) 事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。 2、一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 3、隔离性(Isolation) 一个事务的执行不能被其他事务干扰。 4、持续性/永久性(Durability) 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。 二、事务的四种隔离级别 按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ)。MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔离级别。你可以在命令行用--transaction-isolation选项,或在选项文件里,为所有连接设置默认隔离级别。 例如,你可以在my.inf文件的[mysqld]节里类似如下设置该选项: transaction-isolation = {READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE} 用户可以用SET TRANSACTION语句改变单个会话或者所有新进连接的隔离级别。它的语法如下: SET [SESSION |

数据库四种隔离级别

那年仲夏 提交于 2019-12-03 17:37:53
https://www.cnblogs.com/catmelo/p/8878961.html 起初隔离级别为read uncommitted 读未提交;a,b两个会话,分别开启两个事务,然后a向b转了500元钱,但a未提交该事务, 此时b查看,发现多了500.然后a回滚事务,b再查看账户,发现根本就没有多500.这便是 脏读 。脏读便是可以读取到另一个事务尚未提交的数据。 如果我们此时将隔离级别提升为read committed 读已提交,便可避免脏读。同样b两个会话,分别开启两个事务,然后a向b转了500元钱, 但a未提交该事务,此时b查看,依旧是原钱数. 但此时,如果a 提交事务,b再去查看,发现此时多了500,对b而言,在一个事务中,两次查询的结果不一致,这便是 不可重复读 。 如果我们此时将隔离级别提升为repeatable read 可重复读 ,可以避免脏读和不可重复读的发生。同样a 提交事务,b再去查看,发现 依旧是原钱数,b只能结束当前事务,在开启一个新事务,才能查询到数据的变化,这al便避免了不可重复读。 如果我们设置了 seriizable 串行化,就相当于锁表,某一时间内只允许一个事务访问该表。 在可重复读中,该sql第一次读取到数据后,就将这些数据加锁(悲观锁),其它事务无法修改这些数据,就可以实现可重复读了。但 这种方法却无法锁住insert的 数据

理解事务的4种隔离级别

梦想的初衷 提交于 2019-12-03 13:16:45
事务 事务是访问数据库的一个操作序列 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。 事务的正确执行使得数据库从一种状态转换为另一种状态 。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)的缩写,这四种状态的意思是: 1、原子性 即不可分割,事务要么全部被执行,要么全部不执行。如果事务的所有子事务全部提交成功,则所有的数据库操作被提交,数据库状态发生变化;如果有子事务失败,则其他子事务的数据库操作则会被回滚,即数据库回到事务执行前的状态,不会发生状态转换。 2、一致性 事务的执行使得数据库从一种正确状态转换成另外一种正确状态。 3、隔离性。 在事务正确提交之前,不允许把事务对该数据的改变提供给任何其他事务,即在事务正确提交之前,它可能的结果不应该显示给其他事务。 4、持久性 事务正确提交之后,其结果将永远保存在数据库之中,即使在事务提交之后有了其他故障,事务的处理结果也会得到保存。 事务保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性。 事务并发操作带来的问题 1) 丢失更新 : 一个事务的更新覆盖了另一个事务的更新。 2) 脏读 : 一个事务读取了另一个事务未提交的数据。 3

事务的传播行为和隔离级别

喜你入骨 提交于 2019-12-03 13:05:16
事务使用步骤如下: 步骤一、在spring配置文件中引入<tx:>命名空间 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持 <!-- 事务管理器配置, Hibernate单数据源事务 --> <bean id="defaultTransactionManager" class="org.springframework.orm.hibernate3

事务的传播行为,隔离级别以及锁机制

混江龙づ霸主 提交于 2019-12-03 11:21:38
脏读,不可重复读和幻读。 脏读:读到未提交(uncommited)的数据 不可重复读:多次查询中(提交插入数据的事务) 幻读:在修改事务后(提交了一个添加的事务),之后查询数据以为出现幻觉    事务的隔离级别: read_uncommitted 最低的隔离级别 有脏读,不可重复读和幻读。 read_committed  看到已提交的数据 存在不可重复读和幻像读。 支持sqlsever repeatable_read 存在幻读 。支持mysql serializable    防止脏读,不可重复读外,还避免了幻像读。 MySQL默认的方式的:可重复读。    七种传播行为:  在我们用SSH开发项目的时候,我们一般都是将事务设置在Service层,那么当我们调用Service层的一个方法的时候它能够保证我们的这个方法中执行的所有的对数据库的更新操作保持在一个事务中,在事务层里面调用的这些方法要么全部成功,要么全部失败。那么事务的传播特性也是从这里说起的。   如果你在你的Service层的这个方法中,除了调用了Dao层的方法之外,还调用了本类的其他的Service方法,那么在调用其他的Service方法的时候,这个事务是怎么规定的呢,我必须保证我在我方法里掉用的这个方法与我本身的方法处在同一个事务中,否则如果保证事物的一致性。事务的传播特性就是解决这个问题的,“事务是会传播的

事务的四种隔离级别和七种传播行为

左心房为你撑大大i 提交于 2019-12-03 11:08:13
要想在Spring中使用事务,就需要先了解事务 1.什么是事务? 事务(TRANSACTION) 是作为单个逻辑工作单元执行的一系列操作。 多个操作作为一个整体向系统提交,要么都执行,要么都不执行。 事务是一个不可分割的逻辑单元。 2.事务的特性(ACID) 原子性(Atomicity)  原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性(Consistency) 事务前后数据的完整性必须保持一致。 隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。 持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响 3.什么是脏读,不可重复读,幻读? 脏读: 简单来说,就是一个事务读取到了另一个事务未提交的数据。 不可重复读: 就是说,比如在A事务中进行多次相同的查询,B事务在A事务多次查询之间修改对应表中的数据,导致A事务多次读取的结果不一致。 幻读: 举例来说,就是A事务将表中'性别'列的值都更改为1,B事务在A事务修改之后又添加了一条记录,而'性别'的值为0,回过来A再查询所以的记录时会发现有一条记录的'性别'为0,这种情况就是所谓的幻读 4