0

假设我们有 2 个事务作为 T1,T2,T2 对 T1 修改的数据进行脏读并在 T1 之前提交。现在假设 T1 失败并回滚。我的问题是 - 由于 T2 已提交,T2 所做的更改是否会从共享缓冲区转移到原始数据库(因为我已经读过事务所做的更改一旦事务提交就会永久保存到原始数据库)?如果它们被转移到原始数据库,那么 T1 将如何回滚并获取数据项的先前值(被 T2 读脏)?通过它的缓冲区或原始数据库?

4

1 回答 1

0

除非您通过设置隔离级别专门调用脏读,否则这种问题根本不会发生。这就是交易的全部想法。如果 T1 已更新,T2 将被锁定在行之外。如果您通过设置允许脏读,set transaction isolation level read uncommitted则数据的处理取决于您,通常使用您的 T2 检查在提交之前未更改的行版本。

于 2019-02-13T05:42:32.110 回答