数据库隔离级别以及Spring事务传播
2017-05-08 20:34
281 查看
数据库隔离级别
说这个问题之前我们先说说三个概念。脏读
当一个事务正在访问数据,并且对数据进行了修改,但这个修改了的数据还没提交到数据库中,然后另一个事务也访问了这个数据,那么我们就称这个事务读到的数据是脏数据。这个错误过程就叫脏读。不可重复读
在同一个事务内,多次读同一个数据。在这个事务还没结束时,另一个事务也访问这条数据并做了修改最后提交了修改数据。那么第一个事务可能在某次读的数据和之前的数据不同,这个问题就叫不可重复读。幻读
当一个事务查询了某个表的所有数据,这时一个事务向这张表插入一条记录,当前一个事务再次读取数据时,发现多了一条记录,就像出现了幻觉一样。可能很多人会不清楚不可重复读和幻读的区别。我个人的理解是,不可重复读重在更新某一条记录,即避免它只需要行级锁就行。而幻读则重在插入删除,避免它需要锁住整张表。这纯属个人理解,如若有误,请指出。
四种隔离级别
读未提交
所有事务都可以看到其它未提交事务的执行结果。这一级别很少用在项目中,会出现上面三种错误情况。
读已提交
这是大多数数据库系统的默认隔离级别(但不是MySQL默认的,MySQL是Repeatable Read)。一个事务只能看见已经提交事务所做的改变。但它只能避免脏读。
可重复读
这是MySQL的默认事务隔离级别。一旦事务在读取某条数据时,就会禁止别的事务修改它。它避免了不可重复读这一问题,但依旧会出些幻读。
可串行化
事务串行执行,有先后顺序,肯定不会出问题啦,就是效率较低。
Spring中的事务隔离
ISOLATION_DEFAULT默认使用数据库当前的隔离级别。
ISOLATION_READ_UNCOMMITTED
读未提交。
ISOLATION_READ_COMMITTED
读已提交
ISOLATION_REPEATABLE_READ
可重复读
ISOLATION_SERIALIZABLE
可串行化
Spring事务传播
事务的特性
事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败)。传播行为
下面是Spring配置事务传播和事务隔离的一个小例子:
相关文章推荐
- [spring]事务传播级别隔离级别以及高并发下的应用经验
- Spring事务传播机制和数据库隔离级别
- spring整合hibernate事务管理的四种方式,以及事务的传播行为和隔离级别介绍
- Spring事务传播机制和数据库隔离级别
- Spring的事务ACID特性、隔离级别以及传播行为
- Spring的事务传播属性,数据库的隔离级别
- [spring]事务传播级别隔离级别以及高并发下的应用经验
- spring的事务传播属性与数据库的隔离级别
- 数据库事务的四大特性、隔离级别以及Spring中如何利用AOP进行事务管理
- Spring的事务传播属性,数据库的隔离级别
- spring事务的传播属性,数据库事务特征,隔离级别
- Spring整合Hibernate,事务的几种传播特性,数据库事务隔离级别(脏读幻读不可重复读)
- spring整合hibernate事务管理的四种方式,以及事务的传播行为和隔离级别介绍
- Spring事务传播机制和数据库隔离级别
- [spring]事务传播级别隔离级别以及高并发下的应用经验
- [spring]事务传播级别隔离级别以及高并发下的应用经验
- Spring事务传播机制和数据库隔离级别
- [spring]事务传播级别隔离级别以及高并发下的应用经验
- Spring的事务传播属性,数据库的隔离级别
- Spring事务传播机制和数据库隔离级别