关于不可重复读和幻读的一点点理解
不可重复读主要是针对update和delete来说,而幻读则是针对insert来说。
不可重复读的简单理解
事务A进行查询,事务未提交。而事务B此时对记录进行update,并提交事务。当事务A再次查询(事务未提交的时候),发现两次数据不一样,则是重复读。
幻读的理解
事务A查询表中的所有记录数,未提交事务,此时事务B insert了一条数据,提交事务。当事务A再次查询(事务未提交的时候),发现多了一条数据。
对比
两者产生的结果都是前后数据不一致,但是对于不可重复读 可以针对查询的那条数据加索即行锁,保证只有当前事务能够对这条记录进行更新,删除等。就可以重复读。MySQL的默认隔离级别就是可重复读 REPEATABLE-READ。而要消灭幻读则要锁住整张表,保证当前操作的时候,不能有其他事务对表进行insert操作。可将数据库的隔离级别设置为serializable即串行化来避免。