spring事务配置
mark网址
http://m.blog.csdn.net/article/details?id=5074371
事务配置,先理解事务,事务特性ACID ,看看数据库是不是支持事务管理的
事务有事务的隔离特性 事务的传播特性
1、Serializable:最严格的级别,事务串行执行,资源消耗最大;
2、REPEATABLE READ:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。
3、READ COMMITTED:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统。
4、Read Uncommitted:保证了读取过程中不会读取到非法数据。隔离级别在于处理多事务的并发问题
一般数据库默认read committed 是基于数据正确性 和性能两个方面考虑
理解这些隔离级别,先要理解数据库的几种不一致的情况
-
脏读
脏读又称无效数据读出。一个事务读取另外一个事务还没有提交的数据叫脏读。 例如:事务T1修改了一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因Rollback了,那么事务T2读取的数据就是脏的。 解决办法:把数据库的事务隔离级别调整到READ_COMMITTED
-
不可重复读
不可重复读是指在同一个事务内,两个相同的查询返回了不同的结果。 例如:事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。 解决办法:把数据库的事务隔离级别调整到REPEATABLE_READ
-
幻读
例如:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样。这就叫幻读。 解决办法:把数据库的事务隔离级别调整到SERIALIZABLE_READ
-
不可重复读 和 幻读的区别
不可重复读的重点是修改 同样的条件, 你读取过的数据, 再次读取出来发现值不一样了
具体的事务配置见mark地址。一般现在都是使用注解申明式事务
网友评论