0
点赞
收藏
分享

微信扫一扫

MySQL事务:幻读和不可重复读的区别?


  • 不可重复读的重点是修改:在同一事务中,同样的条件,第一次读的数据和第二次读的数据不一样。(因为中间有其他事务提交了修改)。
  • 幻读的重点在于新增或者删除:在同一事务中,同样的条件,,第一次和第二次读出来的记录数不一样。(因为中间有其他事务提交了插入/删除)。

在MySQL事务中,幻读(Phantom Read)和不可重复读(Non-repeatable Read)是两种不同的数据一致性问题,它们的区别如下:

  1. 不可重复读(Non-repeatable Read):不可重复读指的是在同一个事务中,多次读取同一行数据时,得到的结果可能不一致。这是由于在事务执行期间,其他事务对该行数据进行了修改提交,导致多次读取得到的结果不一致。不可重复读问题主要涉及到数据的修改操作,例如一个事务读取了一行数据,然后另一个事务修改并提交了该行数据,导致第一个事务再次读取时得到了不同的结果。
  2. 幻读(Phantom Read):幻读则是指在同一个事务中,多次执行相同的查询操作时,结果集中的行数可能出现变化。这是由于在事务执行期间,其他事务插入或删除了符合查询条件的数据,导致多次查询得到的结果集行数不一致。幻读问题主要涉及到数据的插入和删除操作,例如一个事务执行了一个范围查询,然后另一个事务在该范围内插入了新的数据,导致第一个事务再次查询时发现出现了新的行。

简而言之,不可重复读问题涉及到已有数据的修改,导致同一事务中多次读取同一行数据时结果不一致;而幻读问题涉及到范围内的数据新增或删除,导致同一事务中多次查询结果集的行数不一致。

这些问题可以通过设置合适的事务隔离级别来进行控制。在"可重复读"(Repeatable Read)或"串行化"(Serializable)隔离级别下,可以防止不可重复读和幻读问题的发生,保证数据的一致性。


举报

相关推荐

0 条评论