为啥一个事务能读取到其他事务修改后未提交的数据( 二 )


心痛,你问之前不好找个翻译工具嘛,还是我审题不清?
Read Ucommitted ,读不到还叫啥Read Ucommitted。
------------------
只有事务commit后才会更新到数据库。
没错啊,commit是对事务(Database Transaction) 而言的。
-------
为什么A还是能读取B修改但未提交的数据呢?没有提交的数据不是没有更新到数据库嘛,那为什么A还是能读到修改后的数据呢?
代码块里部分是原答案,脑抽写错了。
没有加写锁才能脏读。 加没加读锁只是涉及到写要不要等的问题,属于幻想读。
“因为没有给READ加锁,所以A可以读到B修改的数据,未提交只是对于B在执行的事务而言,不是对数据库而言。”---------难道是读取的缓存中数据或其他策略?
这里的策略是事务隔离级别,也就是你设置的Read Ucommitted。 是不是读取数据库缓存是另外的故事。
---------如果这样,那么commit的作用又是什么呢?commit的作用难道不是把缓存/内存中的数据更新/同步到数据库吗?
commit的作用,你还是好好再去看看书。 后面的问题自然就有解答了。
【为啥一个事务能读取到其他事务修改后未提交的数据】 不要满足于我告诉你的,commit是对事务而言。
-------------------
我也不知道为啥有人问:
“设置了Read Uncommitted 之后,为什么一个事务能读取到其他事务修改后未提交(也就是Uncommitted )的数据?”
的时候,我这个答案就被题主认为是“故意显示博学”了。
好,我错了, 我是自大狂。 你开心就好。


推荐阅读