Spring的事务隔离级别

由高到低排序:

1、Serializable:最严格的级别,事务串行执行,资源消耗最大;

2、ISOLATION REPEATABLE READ:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据(即当前事务读取的数据记录会被加锁(应该是读写锁的读锁),其他事务不能修改(获取不到写锁))。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。

3、ISOLATION READ COMMITTED:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统。

4、ISOLATION READUNCOMMITED:保证了读取过程中不会读取到非法数据。隔离级别在于处理多事务的并发问题。

最后Spring还提供了一个默认隔离级别ISOLATION DEFAULT,采取数据库本身默认的隔离级别,mysql是ISOLATION REPEATABLE READ。

 

脏读:读取到另一个事务未提交的数据。使用ISOLATION READ COMMITTED级别可以避免;

不可重复读:(同时操作,事务一分别读取事务二操作时(未提交)和提交后的数据,读取的记录内容不一致)

不可重复读是指在同一个事务内,两个相同的查询返回了不同的结果。

例如:事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。 解决办法:把数据库的事务隔离级别调整到REPEATABLE_READ

 

幻读:(和可重复读类似,但是事务二的数据操作仅仅是插入和删除,不是修改数据,读取的记录数量前后不一致)

例如:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入(注意时插入或者删除,不是修改))了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样。这就叫幻读。

转载自:https://blog.csdn.net/it_man/article/details/5074371

你可能感兴趣的:(spring,mysql)