首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL标准中定义的脏读取与脏读取

MySQL标准中定义的脏读取与脏读取
EN

Stack Overflow用户
提问于 2019-01-22 16:55:32
回答 1查看 100关注 0票数 0

来自MySQL手册:

读未承诺 SELECT语句是以非锁定的方式执行的,但是--可能是行的早期版本--可以使用。因此,使用这个隔离级别,这样的读取是不一致的。--这也称为脏读。否则,此隔离级别的工作方式类似于READ提交。

粗体部分让我很困惑。“行的早期版本可能被使用”?用在哪里?这怎么能被称为“肮脏的阅读”呢?

SQL标准说,脏读取包含从未存在过的数据:

P1 (“脏读”):SQL-事务T1修改行。然后,SQL-transaction T2在T1执行提交之前读取该行。如果T1然后执行回滚,则T2将读取从未提交过的行,因此该行可能被认为从未存在过。

MySQL手册是错的还是怎么的?

EN

回答 1

Stack Overflow用户

发布于 2019-01-22 17:06:07

MySQL定义是one case的脏读:当行已经存在时(但正在由T1更新),T2读取它。那么,如果T1回滚,T2可能对它执行了错误的计算。丑陋。

SQL定义涵盖了更多的情况。例如,当T1第一次创建行时(但尚未提交),然后由T2读取。在这种情况下,如果事务T1被回滚,它就像从来不存在的行.但是T2已经在使用它,谁知道它的用途。丑陋。

总之,这两种情况都是丑陋的,可能导致前后矛盾。SQL定义比MySQL的更全面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54312994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档