多事务依次写入后单事务提交,其他事务读取属于脏读吗?
脏读判定分析:你的场景不属于脏读
好问题!咱们先锚定脏读的核心定义——脏读(Dirty Read)的本质是读取了其他尚未提交的事务所修改的数据,两个关键点缺一不可:一是读取的是「其他事务」的修改,二是该事务「未提交」。
针对你给出的示例场景 w1(X);w2(X);w3(X);c1;r2(X),咱们拆解分析:
- 事务1已经执行了提交操作(
c1),它对X的修改已经成为数据库的持久化状态,不再是「未提交数据」。 - 事务2执行读取操作(
r2(X))时,要么读取的是自身未提交的修改(w2(X)),要么读取的是事务1已提交的修改:- 前者不属于脏读范畴——脏读特指读取其他事务的未提交数据,读取自身的未提交修改不在脏读的定义里;
- 后者更不属于脏读,因为事务1的修改已经完成提交,是合法的已持久化数据。
举个反例帮你区分:如果场景是 w1(X);r2(X);c1,也就是事务1还没提交时,事务2就读取了w1(X)的结果,这才是典型的脏读——因为读取了其他未提交事务的数据。
总结一下:你的场景中,事务1已经提交,无论事务2读取的是自身修改还是事务1的已提交数据,都不符合脏读的判定标准,因此不属于脏读。
内容的提问来源于stack exchange,提问作者per
相关产品推荐
相关产品推荐

