Spring有五大隔离级别:
1、ISOLATION_DEFAULT
2、ISOLATION_READ_UNCOMMITTED
3、ISOLATION_READ_COMMITTED
4、ISOLATION_REPEATABLE_READ
5、ISOLATION_SERIALIZABLE
ISOLATION_DEFAULT
用底层数据库的设置隔离级别。
ISOLATION_READ_UNCOMMITTED
一个事务可以读取到另一个事务未提交的事务记录。
缺点:会出现幻读、脏读、不可重复读。
脏读示例:
事务A,写入一条记录,同时,事务B读入数据,读到了这条记录,但是,之后事务A回滚。因此,事务B读到的数据不是有效的,这种情况称为脏读。
ISOLATION_READ_COMMITTED
一个事务只能读取到已经提交的记录,不能读取到未提交的记录。
缺点:会造成幻读、不可重复读。
不可重复读示例:
在事务A两次读取的过程之间,事务B修改了那条记录并进行提交。因此,事务A前后两次读取的记录不一致,这种情况称为不可重复读。
ISOLATION_REPEATABLE_READ
一个事务可以多次从数据库读取某条记录,而且多次读取的那条记录都是一致的,相同的。
缺点:会造成幻读。
幻读示例:
事务A两次从数据库读取一系列记录,期间,事务B插入了某条记录并提交。事务A第二次读取时,会读取到事务B刚刚插入的那条记录。在事务期间,事务A两次读取的一系列记录不一致,这种情况叫做幻读。
ISOLATION_SERIALIZABLE
序列化,代价最高最可靠的隔离级别。
缺点:会带来性能的下降。