数据库中的脏读、不可重复读和幻读的理解

我们知道数据库事务具有ACID四个特性,其实在实际生产环境中我们更多的考虑的是 Isolation(事务隔离)这个级别。这个隔离会分为四个级别:Read Uncommitted、Read committed、Repeatable Read和Serializable 。

隔离级别对比
级别/是否会产生结果 脏读 不可重复读 幻读
Read Uncommitted
Read committed
Repeatable Read
Serializable

这几个级别产生的效果可以看上图。只要我们知道了他们相应产生的效果就可以知道怎么使用事务级别了。那么关键点就在于怎么理解这几个产生的效果:脏读、不可重复读和幻读。

脏读:当事务A对数据进行修改后未提交,而事务B读取到了事务A修改的结果,这种就叫做脏读。

不可重复读:当事务A对某数据进行两次查询,在两次查询中间事务B对相同数据进行过修改从而导致事务A两次查询结果不一致情况就叫做不可重复读(即两次读取同一个数据的结果不一致)。

幻读:事务A对数据表进行更新,而事务B对表进行插入,导致当A更新完后发现有记录没有 更新到(事务B插入的新纪录),这种情况就叫做幻读(就好像产生幻觉一样)。

你可能感兴趣的:(数据库)