考虑包含{(1),(2)}的表R(A)。
假设交易T1: UPDATE R SET A = 2*A
T2: SELECT AVG(A) FROM R
如果事务T2使用“读取未提交”执行,则返回的可能值是什么?
我的猜测是由于未提交读操作,并且它的元组顺序与我从课程中学到的无关紧要,因此它可以返回1.5、2、2.5或3。
最佳答案
从MySQL documentation for READ UNCOMMITTED
:
SELECT语句以非锁定方式执行,但是可能会使用行的早期版本。因此,使用此隔离级别,此类读取不一致。这也称为脏读。否则,此隔离级别的工作方式类似于READ COMMITTED。
脏读可能会在更新发生之前,之中或之后查看表。正如您所指出的,这意味着表观平均值可能是1.5、2、2.5或3。请考虑:
R1 | R2 | average
1 | 2 | 1.5 <-- update not yet started
2 | 2 | 2 <-- update in progress
1 | 4 | 2.5 <-- update still in progress
2 | 4 | 3 <-- update completed
关于mysql - 阅读未提交的更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60027331/