数据库的脏读、不可重复读和幻读区别
程序员文章站
2022-05-18 10:17:10
1、数据库的ACID 在数据库中,事务是要满足ACID的,即A: 原子性、C:一致性、I:隔离性、D:持久性。其中隔离性是最放松的一个,可以利用数据库锁的机制或者版本并控制机制获取更高的隔离级别,但是随着隔离级别的提高,数据的并发能力有所下降。因此如何在并行和隔离性之间做一个权衡是一个至关重要的问题 ......
1、数据库的acid
在数据库中,事务是要满足acid的,即a: 原子性、c:一致性、i:隔离性、d:持久性。其中隔离性是最放松的一个,可以利用数据库锁的机制或者版本并控制机制获取更高的隔离级别,但是随着隔离级别的提高,数据的并发能力有所下降。因此如何在并行和隔离性之间做一个权衡是一个至关重要的问题。
2、读数据出现的几种问题:
1) 脏读:当一个事务正在访问数据,并对数据进行了修改,但是该修改确未提交到数据库中,这时另外一个事务也访问这个数据,然后使用了这个修改的数据,那么读到的这个数据就是脏数据。
(读到了未提交的数据,解决方法:在写的时候加锁)
2)不可重复读:一次事务内的两次(多次)相同查询,查询到了不同的结果。(在读数据的时候加锁)
3)幻读:一次事务内多次查询返回的结果集不一样(比如增加了或者减少了行记录)。(串行化即可解决)。
脏读--------->不可重复读----------->幻读,事务的隔离性在不断提高,但是并行不断降低。