很久以前,开始的时候只是看看,了解一下相关知识,如事务的隔离级别,传播方式,等等,所以,先介绍一下本文涉及的几个地方。
一、事务的传播方式与隔离级别,这个能够参考spring博客
http://blog.csdn.net/di1nuli/article/details/8727000
简单来说
1、事务的隔离级别分为4个
√: 可能出现 ×: 不会出现
脏读 | 不可重复读 | 幻读 | |
Read uncommitted | √ | √ | √ |
Read committed | × | √ | √ |
Repeatable read | × | × | √ |
Serializable | × | × | × |
(1) ISOLATION_READ_UNCOMMITTED 这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
(2)ISOLATION_READ_COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。
因为一个事务里面,两次读取一行数据,第一次读,另一个事务未提交,第二次读,另一个事务提交了,导致两次读取的数据不同,即不可重复读。
同时,因为以上原因,也会造成幻象读。
这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)
(3)ISOLATION_REPEATABLE_READ 当隔离级别设置为Repeatable read时,可以避免不可重复读,但是不能避免幻像读(这是MySQL的默认事务隔离级别)
二、事务的