脏读和幻读

Posted yanguobin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了脏读和幻读相关的知识,希望对你有一定的参考价值。

当我们使用事务时,有可能会出现这样的情况,有一行数据刚更新,与此同时另一个查询读到了这个刚更新的值。这样就导致了脏读,因为更新的数据还没有进行持久化,更新这行数据的业务可能会进行回滚,这样这个数据就是无效的。数据库的TRANSACTIONREADCOMMITTED,TRANSACTIONREPEATABLEREAD,和TRANSACTION_SERIALIZABLE隔离级别可以防止脏读。

幻读是指一个事务多次执行一条查询返回的却是不同的值。假设一个事务正根据某个条件进行数据查询,然后另一个事务插入了一行满足这个查询条件的数据。之后这个事务再次执行了这条查询,返回的结果集中会包含刚插入的那条新数据。这行新数据被称为幻行,而这种现象就叫做幻读。只有TRANSACTION_SERIALIZABLE隔离级别才能防止产生幻读。

以上是关于脏读和幻读的主要内容,如果未能解决你的问题,请参考以下文章

MySQL理论:脏读不可重复读幻读

MySQL理论:脏读不可重复读幻读

脏读和幻读

关于数据库事务中脏读不可重复读和幻读的理解

什么是脏读,幻读和不可重复读

关于脏读幻读和不可重复读