考虑包含{(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/

10-12 14:18
查看更多