码上敲享录 > mysql面试题 > 不可重复读和幻读区别是什么?可以举个例子吗?

不可重复读和幻读区别是什么?可以举个例子吗?

上一章章节目录下一章 2023-07-17已有141人阅读 评论(0)

不可重复读和幻读都是在并发事务中可能出现的问题,尽管它们有些类似,但两者是不同的概念。


1. 不可重复读(Non-repeatable Read):不可重复读指的是在同一个事务中,两次读取同一行数据时得到了不同的结果。这是因为在同一个事务中,其他事务修改了正在被当前事务读取的数据行。不可重复读的问题主要出现在并发更新的场景中。


  举个例子:

  假设有两个并发事务,事务A和事务B。事务A首先读取了某一行数据,然后事务B修改了该行数据并提交了更改。如果事务A再次读取同一行数据,将会得到不同于之前读取的结果,因为数据已经被事务B修改。


2. 幻读(Phantom Read):幻读指的是在同一个事务中,两次执行相同的查询语句,但结果集中的数据行数或某些数据行的内容发生了变化。这是因为在同一个事务中,其他事务插入或删除了与当前事务查询条件相匹配的数据行。幻读的问题主要出现在并发插入或删除的场景中。


  举个例子:

  假设有两个并发事务,事务A和事务B。事务A首先执行了一个查询语句,返回了满足条件的数据行。然后,事务B在事务A执行查询语句的期间插入了一条新的符合条件的数据行,并提交了更改。如果事务A再次执行相同的查询语句,将会得到不同的结果,因为新插入的数据行出现在结果集中,导致幻读产生。


简而言之,不可重复读强调的是一个事务内部两次读取同一行数据时的不一致性,而幻读强调的是一个事务内部两次执行相同查询语句时结果集的变化。不可重复读是由于并发事务的修改导致的数据一致性问题,而幻读是由于并发事务的插入或删除导致的查询结果的不一致。


向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交