oracle数据库脏读DirtRead

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Liutt55/article/details/80213216

客户端A和客户端B分别取请求数据量为1000w的数据库,A访问的时间为9点00分,并且Select查询所有数据需要10分钟直到9点10分才可以返回结果。客户端B在9点05分的时候去Update数据库所有数据,并且commit成功。请问客户端A查询的数据是客户端Update前的还是Update之后的数据?

答案是更新之前的。

oracle或者是mysql都有一个一致性读原则,在A客户端访问的时候看到的数据库表是什么数据 此时它要查询的就是什么数据。当客户端B去update数据库的时候,会把原来的数据放到一个undo的地方,如果客户端B commit成功失败,就会去undo的地方把原先的数据rollback,那么如果B提交成功了 客户端A在9点10分的时候回去undo找是不是想要的数据,如果不是则会报一个经典的数据库异常snap shot too old(快照太旧异常),反之如果找到原先的数据则返回给客户端A

猜你喜欢

转载自blog.csdn.net/Liutt55/article/details/80213216