幻读指的是在同一事务中,由于其他事务的插入或删除操作,导致同一查询条件下返回了不同的结果集合。幻读通常与事务的隔离级别有关。
隔离级别:
Read Uncommitted(读未提交):
允许一个事务读取另一个事务未提交的数据。可能导致丢失脏读问题。
数据一致性问题: 脏读:一个事务会读取另一个事务未提交的数据
Read Committed(读已提交)Oracle这可以防止脏读。:
保证一个事务提交后,其他事务才能读取到其修改的数据。
但在同一事务中的多次查询可能会看到不同的数据集,可能导致不可重复读,避免了脏读问题。
数据一致性问题: 不可重复读:在同一事务中的多次查询可能会看到不同的数据集
Repeatable Read(可重复读)MySQL:
保证事务执行期间查询的数据集不会发生变化。
可以解决不可重复读和脏读问题,但仍然会产生幻读问题。
数据一致性问题: 幻读:在同一事务内,由于其他事务的插入或删除操作,导致同一查询条件下返回了不同的结果集合
Serializable(串行化):
最高的隔离级别,确保事务之间完全隔离,避免了幻读、不可重复读和脏读问题。
但性能开销较大,因为它通常会使用锁来实现隔离。
数据一致性问题:无