yjy别看我的文章 2023-08-29 14:40 采纳率: 64.3%
浏览 5
已结题

MYSQl的脏读、幻读、不可重复读

MYSQL的多事物产生的问题,脏读,幻读,不可重复读,其中幻读和不可重复读我不是很理解,不可重复读为:事务B读取了两次数据资源,在这两次读取的过程中事务A修改了数据,导致事务B在这两次读取出来的数据不一致。
这种在同一个事务中,前后两次读取的数据不一致的现象就是不可重复读,修改完数据就是读取的数据不一致啊,前一次读id=1的数据然后将id=1的数据修改,第二次再读肯定不一样,我不理解这个不可重复读。幻读:事务B前后两次读取同一个范围的数据,在事务B两次读取的过程中事务A新增了数据,导致事务B后一次读取到前一次查询没有看到的行。幻读和不可重复读有些类似,但是幻读强调的是集合的增减,而不是单条数据的更新。跟不可重复读一样,对一类数据新增或者修改,数据的条数肯定增加这不是对的吗,这不是正常的吗为什么说与问题?

  • 写回答

3条回答 默认 最新

  • 饼子会飞 2023-08-29 14:52
    关注

    回答来自Calude:
    对于不可重复读,需要注意是在同一个事务内进行了两次读取,而两次读取的数据结果不一致。如果是不同事务,数据变化也是正常的。

    例如:

    事务A 开始

    事务A 第一次读取id=1的数据,name=张三

    事务B 开始,更新id=1的数据,将name改为李四

    事务A 第二次读取id=1的数据,name=李四

    事务A结束

    在事务A一个过程中,读取同一数据两次发生了变化,这就是不可重复读。

    对于幻读,其关键在于一个范围内的数据集发生了变化:

    事务A 开始

    事务A 第一次查询id在1-5之间的数据,共5条

    事务B 插入一条id=6的数据

    事务A 第二次查询id在1-5之间的数据,共6条

    事务A 结束

    同一个范围内,事务B的插入操作导致事务A的两次查询结果集大小发生了变化,这就是幻读。

    不可重复读和幻读都违反了事务的隔离性原则,可能读取到脏数据,所以要通过设置合理的隔离级别来避免。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月6日
  • 已采纳回答 8月29日
  • 创建了问题 8月29日

悬赏问题

  • ¥15 C++ 句柄后台鼠标拖动如何实现
  • ¥15 有人会SIRIUS 5.8.0这个软件吗
  • ¥30 comsol仿真等离激元
  • ¥15 静电纺丝煅烧后如何得到柔性纤维
  • ¥15 (标签-react native|关键词-镜像源)
  • ¥100 照片生成3D人脸视频
  • ¥15 伪装视频时长问题修改MP4的时长问题,
  • ¥15 JETSON NANO
  • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
  • ¥20 关于 openpyxl 处理excel文件地问题