MYSQL的多事物产生的问题,脏读,幻读,不可重复读,其中幻读和不可重复读我不是很理解,不可重复读为:事务B读取了两次数据资源,在这两次读取的过程中事务A修改了数据,导致事务B在这两次读取出来的数据不一致。
这种在同一个事务中,前后两次读取的数据不一致的现象就是不可重复读,修改完数据就是读取的数据不一致啊,前一次读id=1的数据然后将id=1的数据修改,第二次再读肯定不一样,我不理解这个不可重复读。幻读:事务B前后两次读取同一个范围的数据,在事务B两次读取的过程中事务A新增了数据,导致事务B后一次读取到前一次查询没有看到的行。幻读和不可重复读有些类似,但是幻读强调的是集合的增减,而不是单条数据的更新。跟不可重复读一样,对一类数据新增或者修改,数据的条数肯定增加这不是对的吗,这不是正常的吗为什么说与问题?
MYSQl的脏读、幻读、不可重复读
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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的两次查询结果集大小发生了变化,这就是幻读。
不可重复读和幻读都违反了事务的隔离性原则,可能读取到脏数据,所以要通过设置合理的隔离级别来避免。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥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文件地问题