码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2019-06-22 11:03:02      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:数据库   读数   数据库事务   就是   完成   事务隔离级别   back   ack   使用   

1.脏读:

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

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

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

2.幻读:

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

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

3.不可重复读:

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

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

注:

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

所以设置了最高级别的SERIALIZABLE_READ就不需要设置其他的了

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

标签:数据库   读数   数据库事务   就是   完成   事务隔离级别   back   ack   使用   

原文地址:https://www.cnblogs.com/cdlyy/p/11067658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!