脏读,不可重复读,幻读及事务隔离等级

Posted xyz0835

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了脏读,不可重复读,幻读及事务隔离等级相关的知识,希望对你有一定的参考价值。

脏读,不可重复读,幻读及事务隔离等级

概念 现象 出现条件 解决办法
脏读 读取到了别的事务未提交的数据,而读取到的数据可能会回滚,所以得到的数据可能是假数据,故称为脏读 隔离等级为Uncommitted 将隔离等级改为Committed
不可重复读 事务中两次查询结果不一致。原因:A事务的两次查询过程中,B事务修改/删除并提交了新的数据 隔离等级为Committed及以下 将隔离等级改为Repeatable
幻读 事务中两次查询结果条数不一致。原因:A事务的两次查询过程中,B事务新增并提交了符合A事务查询条件的数据 隔离等级为Repeatable及以下 将隔离等级改为Serializable



事务级别 特点/实现方式 脏读 不可重复读 幻读
Uncommitted 可以读取别的事务没有提交而可能回滚的数据,造成脏读。
Committed 只能读取其他事务已提交的数据。如果有其他未完成的事务,则不能获得查询结果。必须等待所有事务都结束,才能返回查询结果。避免了脏读。
但是A事务已查询出来的数据,可以被B事务能修改/删除,造成了A事务两次相同语句查询出来的结果不一致,即不可重复读。也会造成幻读
×
Repeatable A事务的查询过程中(A事务未结束),B事务不能更新或删除A事务中读取出来的数据,必须等待A事务结束后才能进行。避免了不可重复读。
但是B事务可以新增符合A事务查询条件的数据。从而会造成幻读。即A事务在B事务新增前后查询出来的结果数目不同。
× ×
Serializable A事务查询过程中(A事务未结束),B事务至少不能新增/修改/删除符合A查询条件内的任何数据,必须等待A事务结束。也有可能不能增/删/改A事务查询条件外的数据。
是最强隔离等级。
× × ×





以上是关于脏读,不可重复读,幻读及事务隔离等级的主要内容,如果未能解决你的问题,请参考以下文章

脏读,不可重复读,虚读及四大隔离级别

什么是脏读不可重复读幻读?一文带你搞定MySQL事务隔离级别

什么是脏读不可重复读幻读?一文带你快速搞定MySQL事务隔离级别

数据库事务隔离级别-- 脏读幻读不可重复读(清晰解释)

Hibernate中的事务隔离问题(脏读不可重复读幻读)

数据库事务隔离级别-- 脏读幻读不可重复读