来自MySQL手册:
读未承诺 SELECT语句是以非锁定的方式执行的,但是--可能是行的早期版本--可以使用。因此,使用这个隔离级别,这样的读取是不一致的。--这也称为脏读。否则,此隔离级别的工作方式类似于READ提交。
粗体部分让我很困惑。“行的早期版本可能被使用”?用在哪里?这怎么能被称为“肮脏的阅读”呢?
SQL标准说,脏读取包含从未存在过的数据:
P1 (“脏读”):SQL-事务T1修改行。然后,SQL-transaction T2在T1执行提交之前读取该行。如果T1然后执行回滚,则T2将读取从未提交过的行,因此该行可能被认为从未存在过。
MySQL手册是错的还是怎么的?
发布于 2019-01-22 17:06:07
MySQL定义是one case的脏读:当行已经存在时(但正在由T1更新),T2读取它。那么,如果T1回滚,T2可能对它执行了错误的计算。丑陋。
SQL定义涵盖了更多的情况。例如,当T1第一次创建行时(但尚未提交),然后由T2读取。在这种情况下,如果事务T1被回滚,它就像从来不存在的行.但是T2已经在使用它,谁知道它的用途。丑陋。
总之,这两种情况都是丑陋的,可能导致前后矛盾。SQL定义比MySQL的更全面。
https://stackoverflow.com/questions/54312994
复制相似问题