事务隔离级别

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

左心房为你撑大大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

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

不想你离开。 提交于 2019-12-03 11:06:25
一,事务的特性(ACID): 原子性(Atomicity): 事务是一个完整的操作,事务的各步操作都是不可再分的,要么都执行, 要么都不执行。 一致性(Consistency): 当事务完成时,数据必须处于一致的状态。 隔离性(Isolation): 并发事务之间相互独立、隔离,它不应以任何方式依赖于或影响其他事务。 持久性(Durability): 事务完成后,它对数据库的修改被永久保持。 在Spring中,所有操作事务的类都继承自 PlatformTransactionManager 二,事务的隔离级别 ISOLATION_READ_UNCOMMITTED:读未提交 ISOLATION_READ_COMMITTED:读已提交 ISOLATION_REPEATABLE_READ:可重复读 ISOLATION_SERIALIZABLE:串行化 三,脏读,不可重复读,幻读(虚读) 脏读:A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作,这时候如果事务B回滚,那么A事务读到的数据是不被承认的。 不可重复读:不可重复读是指A事务读取了B事务已经提交的更改数据。假如A在取款事务的过程中,B往该账户转账100,A两次读取的余额发生不一致。 幻读:A事务读取B事务提交的新增数据,会引发幻读问题。幻读一般发生在计算统计数据的事务中 四,事务的传播行为 五,锁机制 悲观锁:

MyBatis与Spring的整合

假如想象 提交于 2019-12-03 11:04:33
10.Spring 对事务的整合 10.1对事务的复习 什么是事务 : 事务 (TRANSACTION) 是作为单个逻辑工作单元执行的一系列操作。 多个操作作为一个整体向系统提交,要么都执行,要么都不执行。 事务是一个不可分割的逻辑单元。 事务的特性 : 事务具备以下四个特性,简称ACID属性。 l 原子性 (Atomicity): 事务是一个 完整的操作,事务的各步操作都是不可再分的,要么都执行, 要么都不执行。 l 一致性 (Consistency): 当事务完成时,数据必须处于 一致的状态。 l 隔离性 (Isolation): 并发事务之间相互独立、隔离,它不应以任何方式依赖于或影响其他事 务。 l 持久性 (Durability): 事务完成后,它对数据库的修改被永久保持。 10.2Spring中对事务的整合 在Spring中,所有操作事务的类都继承自 PlatformTransactionManager 事务的隔离级别 ISOLATION_READ_UNCOMMITTED:读未提交 ISOLATION_READ_COMMITTED:读已提交 ISOLATION_REPEATABLE_READ:可重复读 ISOLATION_SERIALIZABLE:串行化 脏读、不可重复读、幻读 脏读:A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作,这时候如果事务B回滚

Spring事物

走远了吗. 提交于 2019-12-03 11:02:12
事务   事务必须服从ISO/IEC所指定的ACID原则。ACID是原子性,一致性,隔离性,持久性的缩写。   原子性:     表示事务执行过程中的任何失败都将导致事务所做的任何修改失效;   一致性:     表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行之前的状态;   隔离性:     表示事务执行过程中对数据的修改,在事务提交之前对其他事务不可见;   持久性:     表示已提交的数据在事务执行失败时,数据的状态都应该正确;   通俗的理解,事务是一组院子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行有错误,则撤销先前执行过的所有指令。更简单的说就是: 要么全部执行成功,要么撤销不执行 。 隔离级别   1. ISOLATION_READ_UNCOMMITTED :这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。(读未提交)   这种隔离级别会产生脏读,不可重复读和幻像读。   2. ISOLATION_READ_COMMITTED :保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据(读已提交)   3. ISOLATION_REPEATABLE_READ :这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读

事务经典案例

拥有回忆 提交于 2019-12-03 10:50:01
1. 使用事务工厂实现 1.1 创建 Dao 层接口 public interface TransationDao { //加钱方法 public void addMoney(Double dou); //减钱方法 public void subMoney(Double dou); } 1.2 创建 Dao 层接口实现类 @Repository public class TransationDaoImpl implements TransationDao { @Resource private JdbcTemplate jdbcTemplate; @Override public void addMoney(Double dou) { String sql="update accounts set balance=balance+? where accountid=1"; /*this.getJdbcTemplate().update(sql, dou);*/ jdbcTemplate.update(sql,dou); } @Override public void subMoney(Double dou) { String sql="update accounts set balance=balance-? where accountid=6"; /*this

Spring事务

橙三吉。 提交于 2019-12-03 10:48:20
1.事务的隔离级别 ISOLATION_READ_UNCOMMITTED:读未提交 ISOLATION_READ_COMMITTED:读已提交 ISOLATION_REPEATABLE_READ:可重复读 ISOLATION_SERIALIZABLE:串行化 2.脏读、不可重复读、幻读 脏读:A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作,这时候如果事务B回滚,那么A事务读到的数据是不被承认的。例如常见的取款事务和转账事务 不可重复读 : 不可重复读是指 A事务读取了B事务已经提交的更改数据。假如A在取款事务的过程中,B往该账户转账100,A两次读取的余额发生不一致。 幻读 :A事务读取B事务提交的新增数据,会引发幻读问题。幻读一般发生在计算统计数据的事务中,例如银行系统在同一个事务中两次统计存款账户的总金额,在两次统计中,刚好新增了一个存款账户,存入了100,这时候两次统计的总金额不一致。 spring事务与数据库事务与锁之间的关系 spring事务: spring事务本质上使用数据库事务,而数据库事务本质上使用数据库锁,所以spring事务本质上使用数据库锁,开启spring事务意味着使用数据库锁; 那么事务的隔离级别与锁有什么关系呢?本人认为事务的隔离级别是通过锁的机制实现的,事务的隔离级别是数据库开发商根据业务逻辑的实际需要定义的一组锁的使用策略

事务的隔离级别和传播方法

☆樱花仙子☆ 提交于 2019-12-03 10:46:12
1. 事务的隔离级别和传播方法 事务的四个特性 1: 原子性 :事务包含的所有操作要么全部成功,要么全部失败回滚;成功必须要完全应用到数据库,失败则不能对数据库产生影响; 2: 一致性 :事务执行前和执行后必须处于一致性状态, 例:用户A和用户B的前加起来一共是5000; 无论AB用户之间是如何相互转换的,事务结束后两个用户的钱加起来还是5000,这就是事务的一致性。 3: 隔离性 :当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不被其他事务的操作所干扰,多个并发事务之间要相互隔离; 4: 持久性 :一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况下也不会丢失事物的操作 事务的隔离级别: 1、Read uncommitted(读未提交):最低级别,任何情况都会发生。 2、Read Committed(读已提交):可避免脏读的发生。 3、Repeatable read(可重复读):可避免脏读、不可重复读的发生。 4、Serializable(串行化):避免脏读、不可重复读,幻读的发生。 1:脏读 是指一个事务处理过程里读取了另一个未提交的事务中的数据,然后使用了这个数据; 例:用户A向用户B转账100元,A通知B查看账户,B发现前确实已到账,而之后无论第二条SQL是否执行,只要该事务部提交,则所有操作都将回滚

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

人走茶凉 提交于 2019-12-03 10:44:06
事务的隔离级别: read_uncommitted 这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。 这种隔离级别会产生脏读,不可重复读和幻像读。 read_committed 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。 这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。 repeatable_read 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。 它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。 serializable 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。 除了防止脏读,不可重复读外,还避免了幻像读。 MySQL默认的方式的:可重复读。 七种传播行为:   在我们用SSH开发项目的时候,我们一般都是将事务设置在Service层,那么当我们调用Service层的一个方法的时候它能够保证我们的这个方法中执行的所有的对数据库的更新操作保持在一个事务中,在事务层里面调用的这些方法要么全部成功,要么全部失败。那么事务的传播特性也是从这里说起的。   如果你在你的Service层的这个方法中,除了调用了Dao层的方法之外,还调用了本类的其他的Service方法,那么在调用其他的Service方法的时候

Spring实现事务管理

点点圈 提交于 2019-12-03 10:39:45
三种实现方式   1.工厂模式   2.aop   3.注解 //公共的 .事务管理器 <bean id="Transactionmanager" class="DataSourceTransactionmanager">   <property name="dataSource" ref="dataSource"> 1.工厂模式   1.事务管理器    2.事务代理工厂    <bean id class="TransactionProxyFactoryBean"> 指向事务管理器 <property name="" ref=""> 指向目标对象 <property name="" ref=""> 设置方法 <property > <props> <prop key="方法名">传播行为,隔离空间</prop>   TransactionD封装的四种隔离方式,七种传播行为 2.aop   1.事务管理器   2.调取事务管理器的方法管理目标方法的事务    <tx:advice id= transaction-manager="指向事务管理器"> 指定事务管理的方法 <tx:attributes> <tx:method name="方法名" isolation="事务隔离级别" propagetion="传播行为"   将方法的事务管理与切点织入在一起 <aop:config>

mysql面试题

会有一股神秘感。 提交于 2019-12-03 10:38:32
1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 2、MySQL中myisam与innodb的区别,至少5点 (1)、问5点不同; (2)、innodb引擎的4大特性 (3)、2者selectcount(*)哪个更快,为什么 3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 (1)、varchar与char的区别 (2)、varchar(50)中50的涵义 (3)、int(20)中20的涵义 (4)、mysql为什么这么设计 4、innodb的事务与日志的实现方式 (1)、有多少种日志; (2)、事物的4种隔离级别 (3)、事务是如何通过日志来实现的,说得越深入越好。 5、问了MySQL binlog的几种日志录入格式以及区别 (1)、binlog的日志格式的种类和分别 (2)、适用场景; (3)、结合第一个问题,每一种日志格式在复制中的优劣。 6、问了下MySQL数据库cpu飙升到500%的话他怎么处理? (1)、没有经验的,可以不问; (2)、有经验的,问他们的处理思路。 7、sql优化 (1)、explain出来的各种item的意义; (2)、profile的意义以及使用场景; 8、备份计划,mysqldump以及xtranbackup的实现原理 (1)、备份计划; (2)、备份恢复时间; (3)