Oracle SQL中:在连接语句中使用NOLOCK

4

在连接语句中的表名后面,我不能使用NOLOCK。尝试读取未提交的数据是否在连接中有效呢?


3
你在Oracle中不需要这个,读者永远不会阻塞写者。此外:Oracle不支持脏读取。 - user330315
1个回答

9
联接是无关的。在Oracle中不使用NOLOCK。查询只会看到已提交的数据(以及执行查询的事务中未提交的任何更改)。 您可以编写一个查询,例如SELECT * FROM tbl NOLOCK,但是NOLOCK仅被用作表别名,并不会改变查询机制。

3
补充一下,(NOLOCK)提示通常用于执行读取大量行的查询时。在 SQL Server 中,默认的读取一致性模型使用共享锁,因此读取会阻塞写入操作,并且可能发生锁升级。因此,即使是简单查询,您也可能会锁定整个表或多个表,并且在您的查询完成之前,没有人可以修改数据。Oracle 使用快照读取一致性,并且不会将锁存储在内存中,因此那里不存在锁升级的情况。 - Husqvik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,