2010-10-15 75 views
4

在SQL Server我用内部查询如下几步:甲骨文等效ROWLOCK的,UPDLOCK,READPAST查询提示

  • ROWLOCK(行级锁定)
  • UPDLOCK(防止脏读)
  • READPAST(不要阻止等待一个行锁,去第一个解锁行)

eg

select top 1 data from tablez with (rowlock,updlock,readpast); 

Oracle是否存在等效的查询提示?

回答

7

ROWLOCK应的是FOR UPDATE条款

select * 
from emp 
for update; 

由于11g的Oracle已经记录了SKIP LOCKED语法这是READPAST等价的:

select * 
from emp 
for update skip locked; 

这句法已经好久工作(这是高级队列的基础),但如果它不在文档中,则不支持,

没有相应的UPDLOCK锁定,因为Oracle平整不允许脏读。了解更多。

+0

非常感谢。你确定你最后的陈述吗?看起来FOR UPDATE是UPDLOCK的替代品,而ROWLOCK更多的是所使用的锁的粒度。 – Synesso 2010-10-15 02:40:44

+0

锁类型之间没有简单的一对一关系。 Oracle中的DML由行级锁驱动。在Oracle中没有共享读锁的概念,因为它使用了不同的一致性机制。独占插入/更新/删除锁定在数据记录本身上。 Oracle仅使用表级锁来防止并发DDL。 – 2010-10-15 03:04:46