数据库脏读,幻读,不可重复读

时间:2020-09-16 12:23:56   收藏:0   阅读:12

1.脏读:

指一个事务A正在访问数据,并且对该数据进行了修改,但是这种修改还没有提交到数据库中(也可能因为某些原因Rollback了)。这时候另外一个事务B也访问这个数据,然后使用了这个被A修改的数据,那么这个数据就是脏的,并不是数据库中真实的数据。这就被称作脏读。

解决办法:把数据库事务隔离级别调整到READ_COMMITTED

即让用户在更新时锁定数据库,阻止其他用户读取,直到更新全部完成才让你读取。

2.幻读:

指一个事务A对一个表中的数据进行了修改,而且该修改涉及到表中所有的数据行;同时另一个事务B也在修改表中的数据,该修改是向表中插入一行新数据。那么经过这一番操作之后,操作事务A的用户就会发现表中还有没修改的数据行,就像发生了幻觉一样。这就被称作幻读。

解决办法:把数据库事务隔离级别调整到SERIALIZABLE_READ

3.不可重复读:

指在一个事务A内,多次读同一个数据,但是事务A没有结束时,另外一个事务B也访问该同一数据。那么在事务A的两次读数据之间,由于事务B的修改导致事务A两次读到的数据可能是不一样的。这就发生了在一个事务内两次读到的数据不一样,这就被称作不可重复读。

解决办法:把数据库事务隔离级别调整到REPEATABLE_READ

注:

级别高低:脏读 < 不可重复读 < 幻读

所以设置了最高级别的SERIALIZABLE_READ就不需要设置其他的了,即解决了幻读问题那么脏度和不可重复读自然就都解决了。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!