事务执行脏读取提交后,数据库中的脏读取问题更新

时间:2019-02-13 04:08:46

标签: database concurrency transactions dirtyread

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

1 个答案:

答案 0 :(得分:0)

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