请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

幻读理解不是很透彻

mysql版本是5.5
隔离级别设置 Repeatable Read
1.事物A 查询表user 2. 事物B 在user表中新增或者删除几条数据 提交事物(commit)
3.事物A再次查询user表 不会查找到新增或者删除的数据,与两次查询中数据不一致感觉有点矛盾 ,( 实际上事物B已经新增或者删除了数据 ) 结果事物A查到的结果中 没有新增或者删除的数据。
幻读可不可理解为 一个事物新增或者删除数据并提交,另一个事物看不见新增的数据或者删除的数据
希望老师帮忙解答下

正在回答

2回答

同学你好:

    首先来说,你的 MySQL 版本有点低(不过不影响使用),建议升级到 5.7 版本;另外,隔离级别的话,企业级开发都是使用“提交读”,而不会使用“可重复读”。

    “可重复读”不能解决幻读的问题,幻读的定义是:如果另一个事务同时提交了新数据,本事务再更新时,就会“惊奇的”发现了这些新数据,貌似之前读到的数据是“鬼影”一样的幻觉。

    所以,也就是你问题里描述的情况。你可以简单的认为:“可重复读”就是在一个事务里面读取的数据都是一样的。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!

2 回复 有任何疑惑可以回复我~
  • 提问者 徐憨憨 #1
    老师你好:
    幻读的定义中本事物再更新时   可以理解为  本事物 更新数据并且提交事物。
    另一个事物提交了新数据,本事物再次更新数据并且提交事物 ,因为提交之后就会看见之前另一个事物提交的新数据,造成的幻觉是这个意思吧
    这个也就是 在一个事务的两次查询中数据行不一致
    回复 有任何疑惑可以回复我~ 2020-06-11 17:24:06
  • 提问者 徐憨憨 #2
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-06-11 17:39:33
兔头咖啡 2020-06-11 17:35:15

你的理解反了
同一事务中,两次查询中数据不一致  才是幻读
一致,就是解决了幻读

2 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信