我们可以在读取提交级别中进行脏读吗?

时间:2013-10-14 20:38:47

标签: mysql sql transactions isolation-level

我对READ COMMITED隔离级别有点困惑。 如果事务X(启动)读取一行,更改行并再次读回该行,这是否被视为特定隔离级别的脏读?

1 个答案:

答案 0 :(得分:0)

无论事务隔离级别如何,事务总是可以读取它所做的更改。这不是一个肮脏的阅读。

READ COMMITTED表示您的交易将看到其他交易所做的最近提交的更改。

READ UNCOMMITTED意味着您的交易可以看到在其他交易中所做的更改,即使它们尚未提交。这是一个肮脏的阅读。这真的不太可能是你想要的。


重新评论。

说我有一个书店的应用程序。有人试图买100本最新的丹布朗书。首先,我的应用程序将图书的库存更新为零,然后尝试验证他们的信用卡。他们的信用卡没有足够的信用来支付100本书的费用,因此被拒绝。然后交易回滚,恢复库存中的原始书籍数量。

与此同时,您的应用正在监控库存水平,以了解何时重新订购图书。如果您使用READ UNCOMMITTED,您可以轻松地看到库存减少到零。也就是说,在我的应用更新后但在它回滚之前。您的应用非常高效,它会立即向发布商发送新订单以获取新的图书。

几天后你会收到额外的一摞书,但你仍然有旧的库存,所以书架上没有空间,额外的盒子留在过道里,直到有人绊倒并伤害自己。 : - (

如果你只使用了READ COMMITTED,你就不会对某人扭伤脚踝负责。