数据脏读-非重复读-幻读

1,脏读:(读取了还未提交的数据

  A事务正在执行行数据修改,还未提交到数据库;

  B事务此时访问行数据直接取用了还未提交的修改;

  解决:A事务未提交前,不允许其他事务访问A事务修改内容

2,不可重复读: (修改:同样的数据再次读取数据发生改变

  A事务多次读取同一行数据,还未读取结束;

  B事务此时修改了行数据,导致A事务多次读取的数据不一致;

  解决:B事务修改操作提交之后,在进行读取操作

3,幻读:(新增删除:同样的数据再次读取数量发生改变

  A事务修改所有行数据,还未提交;

  B事务此时插入新的行数据,A操作发现还有未修改的行数据(B事务插入操作)

  解决:A事务修改提交后,在进行其他操作新增删除等操作

4,丢失更新:(修改:更新内容丢失

  A事务和B事务同时修改同一行数据,出现A事务修改内容丢失,修改内容变成B事务修改内容;

  解决:进行行加锁,只允许并发一个更新事务

基于元数据的 Spring 声明性事务 :

Isolation 属性一共支持五种事务设置,具体介绍如下:

l          DEFAULT 使用数据库设置的隔离级别 ( 默认 ) ,由 DBA 默认的设置来决定隔离级别 .

l          READ_UNCOMMITTED 会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 )

l          READ_COMMITTED  会出现不可重复读、幻读问题(锁定正在读取的行)

l          REPEATABLE_READ 会出幻读(锁定所读取的所有行)

l          SERIALIZABLE 保证所有的情况不会发生(锁表)

  

原文地址:https://www.cnblogs.com/wanhua-wu/p/6655631.html