1.在并发的环境中,可能出现下面三种情况
(1) Dirty Reads 脏读
(2)Non-Repeatable Reads 不可重复读
(3) Phantom Reads 幻像读
2.针对上面三种现象,Spring事务划分了事务的隔离级别
隔离级别 | 可能出现的现象 |
---|---|
DEFAULT | 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应 |
READ_UNCOMMITTED (读未提交) | 这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。 |
READ_COMMITTED (读已提交) | 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。 |
REPEATABLE_READ (可重复读) | 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了不可重复读 |
SERIALIZABLE(串行化) | 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。 |