什么是事务(DBMS)中的脏读?
当许多事务同时执行时,我们称它们为并发事务。需要并发来提高时间效率。如果有许多事务试图访问相同的数据,就会出现不一致。需要并发控制来保持数据的一致性。
为了并发运行事务,我们将它们的操作交错。每笔交易都会获得一部分计算时间。
交易中的问题
这会导致以下问题-
丢失更新问题。(WW冲突)
脏读/临时更新。(WR冲突)
不可重复读/不正确分析问题。(读写冲突)
所有这些都是因为隔离被打破了。
让我们讨论脏读或临时更新。
脏读
脏读是对未提交数据的读取。如果某个特定行被另一个正在运行的应用程序修改并且尚未提交,我们也会运行一个应用程序来读取具有相同未提交数据的同一行。这就是我们所说的脏读状态。
一个主要的事情是脏读者必须停止阅读脏书。
我们可以尝试使用共享锁来防止其他事务修改该行,如果在这里进行的话。
脏读问题示例
示例1
第1步-考虑我们有一个在线购物系统,用户可以在其中同时购买和查看买家产品。
第2步-让我们假设一个用户尝试购买产品的情况,一旦用户购买了产品,更新库存中的计数值将立即改变。
第3步-让我们看库存中有10件商品,但现在是9件。
第4步-此外,由于此交易,还将与计费网关进行通信。
步骤5-同时,如果有其他用户同时进行了交易,则新用户将能够看到库存中的9件商品。
第6步-但是,让我们假设第一个用户由于某些错误或资金不足而无法完成他/她的交易。
步骤7-然后,在这种情况下,第一个用户完成的交易将回滚,现在库存价值将再次变为10。
第8步-但是,当第2个用户进行交易时,库存中的无物品为9。
步骤9-这称为脏数据,整个问题称为脏问题。
示例2
考虑另一个例子
让T2读取T1对X的更新值,但T1失败并回滚。因此,T2读取了错误的X值。