跳到主要内容

MySQL 不可重复读和幻读区别 ?

参考答案:

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

  1. 不可重复读(Non-repeatable Read): 不可重复读是指在同一个事务中,多次读取同一行数据时,得到的结果可能不一致。这是由于在事务执行期间,其他事务对该行数据进行了修改并提交,导致多次读取得到的结果不一致。不可重复读问题主要涉及到数据的修改操作,例如一个事务读取了一行数据,然后另一个事务修改并提交了该行数据,导致第一个事务再次读取时得到了不同的结果。

  2. 幻读(Phantom Read): 幻读是指在同一个事务中,多次执行相同的查询语句,但由于其他事务插入或删除了符合查询条件的数据,导致每次查询得到的结果集行数不一致。简而言之,幻读问题涉及到范围内的数据新增或删除,导致同一事务中多次查询结果集的行数不一致。

总结来说,不可重复读是由于其他事务对同一行数据进行了修改导致的问题,而幻读是由于其他事务插入或删除了符合查询条件的数据导致的问题。这两种问题都可能导致数据的不一致性,因此在设计数据库和编写事务时需要考虑如何避免这些问题。