赃读、不可重复读 和 幻读

三种读法的产生缘由:都是因为并发访问致使数据发生了变化数据库

1.脏读(读取未提交的数据)

  事务A正在访问数据,而且对数据进行了修改,而这种修改尚未提交到数据库中;此时事务B也访问这个数据,而且使用了这个数据。并发

2.不可重复读(先后屡次读取,发现数据内容不一致)

  事务A在执行读取操做,因为事务A比较大,先后读取完同一条数据可能须要经历很长的时间。当事务A读取完一条数据;随后事件B执行了更改操做,将以前的数据进行了修改;当事务A第二次读取这串数据,发现这次读取的数据内容跟以前不一样了,也就是数据不重复了。spa

  事务A 事务B
1 开始事务  
2 第一次读取数据,小明年龄为20  
3   开始事务
4 其余操做  
5   更改小明年龄为30
6   提交事务
7 第二次读取数据,此时小明年龄已为30  
备注 按照正常逻辑,事务A先后两次取到的数据应该一致

 

3.幻读(先后屡次读取,发现数据总量不一致)

  事务A在执行读取操做,须要进行两次统计数据的总量,前一次查询完数据总量后;此时事务B执行了新增数据总量的操做,而且提交;事件A进行第二次读取数据的总量,发现跟第一次统计的数量不一样,就像产生了幻觉同样,无缘无故的多了几条数据。事件

  事务A 事务B
1 开始事务  
2 第一次查询,假设数据总量为100条  
3   开始事务
4 其余操做  
5   新增长100条数据
6   提交事务
7 第二次查询,发现数据总量已为200条  
备注 按照正常逻辑,事务A先后两次取到的数据应该一致

注意:事务

  不可重复读的重点是修改:一样的条件,你读取过的数据,再次读取出来发现值不同了。table

  幻读的重点在于新增或者删除:一样的条件,第 1 次和第 2 次读出来的记录数不同。统计

相关文章
相关标签/搜索