在说spring事务隔离级别之前,先说在多事务并发执行时,会出现的几种情况
1)脏读 一个事务读取了另一个事务改写但是还没有提交的数据,如果这些数据被回滚,则第一个事务读到的数据无效。
2)不可重复读 在同一个事务中,多次读取同一数据返回的结果有所不同。
3)幻读 一个事务读取了几行数据,另一个事务又插入了几条数据,这个时候第一个事务就会发现出现了一些原来没有 的数据
三种离级别则是为了解决以上问题而存在的,在Spring中,事务隔离级别有五个
1) DEFAULT 使用数据库默认的数据隔离级别
2)READ_UNCOMMITED 允许读取还未提交的改变了的数据 可能导致以上三种情况出现
3)READ_COMMITTED 允许在并发事务已经提交后读取。可防止第一种情况,而无法防止后面两种情况的出现
4)REPEATABLE_READ 对相同字段的多次读取是一致的,除非数据被事务本身改变 。可防止前两种情况,无法防止第三种情况
5)SERIALIZABLE 完全服从ACID的事务隔离级别,确保三种情况不会发生,但是在所有的隔离级别中是最慢的