欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据库的脏读、不可重复读和幻读区别

程序员文章站 2022-10-27 15:58:21
1、数据库的ACID 在数据库中,事务是要满足ACID的,即A: 原子性、C:一致性、I:隔离性、D:持久性。其中隔离性是最放松的一个,可以利用数据库锁的机制或者版本并控制机制获取更高的隔离级别,但是随着隔离级别的提高,数据的并发能力有所下降。因此如何在并行和隔离性之间做一个权衡是一个至关重要的问题 ......

1、数据库的acid

        在数据库中,事务是要满足acid的,即a: 原子性、c:一致性、i:隔离性、d:持久性。其中隔离性是最放松的一个,可以利用数据库锁的机制或者版本并控制机制获取更高的隔离级别,但是随着隔离级别的提高,数据的并发能力有所下降。因此如何在并行和隔离性之间做一个权衡是一个至关重要的问题。

2、读数据出现的几种问题:

1) 脏读:当一个事务正在访问数据,并对数据进行了修改,但是该修改确未提交到数据库中,这时另外一个事务也访问这个数据,然后使用了这个修改的数据,那么读到的这个数据就是脏数据。

(读到了未提交的数据,解决方法:在写的时候加锁)

2)不可重复读:一次事务内的两次(多次)相同查询,查询到了不同的结果。(在读数据的时候加锁)

3)幻读:一次事务内多次查询返回的结果集不一样(比如增加了或者减少了行记录)。(串行化即可解决)。

脏读--------->不可重复读----------->幻读,事务的隔离性在不断提高,但是并行不断降低。