zoukankan      html  css  js  c++  java
  • 赃读、不可重复读 和 幻读

    三种读法的产生原因:都是由于并发访问导致数据发生了变化

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

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

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

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

      事务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前后两次取到的数据应该一致

    注意:

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

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

  • 相关阅读:
    BOM
    no response from Graphic Screen Painter Exiting
    Windows Mobile 中模拟按键
    C# 获取汉字拼音首字母
    Web Service介绍
    .net/c#中栈和堆的区别及代码在栈和堆中的执行流程详解
    使用JSON加速AJAX(By Sean Kelly)
    Sql字符串操作函数
    一个简单AJAX注册示例
    .Net平台开发的技术规范与实践精华总结
  • 原文地址:https://www.cnblogs.com/blue-tea/p/11815047.html
Copyright © 2011-2022 走看看